带参数的正则表达式模式,希望在单词内允许有特殊符号

本文关键字:单词内 特殊符号 希望 参数 正则表达式 模式 | 更新日期: 2023-09-27 18:12:23

你好,请告诉我我需要在参数部分(只有1时间内允许一个>只有一次)。

工作:

^(?<command>(name|Name))'s:'s(?<parameter>['w@](['s'w._@=*'^/'[']]*['w.^/'[']])*(,'s['w@](['s'w._@=*'^/'[']]*['w.^/'[']])*)*)(?<seperator>'s>>'s)*(?<description>'w(['s'w]*['w.])*)?$

不工作的一个,我认为我可以实现这样,但错误的:

^(?<command>(name|Name))'s:'s(?<parameter>['w@](['s'w._>@=*'^/'[']]*['w.^/'[']])*(,'s['w@](['s'w._>@=*'^/'[']]*['w.^/'[']])*)*)(?<seperator>'s>>'s)*(?<description>'w(['s'w]*['w.])*)?$

期望输入:

Name : param > eter1, parameter2 >> description

期望输出:
CommandPart: Name
ParameterPart1: param> eter1
ParameterPart2: parameter2
描述:

带参数的正则表达式模式,希望在单词内允许有特殊符号

我假设你的"预期输入"实际上不是预期输入,因为你的模式只有在commandnameName取代时才会匹配。

它通常也有助于解释什么不像预期的那样,因为我们不知道你真正想要这个正则表达式做什么。它也确实有助于说明你用什么语言做这件事,因为regex在几乎所有语言中都有不同的实现。

然而,让RegexBuddy咀嚼它,并添加您预期的输入,使我假设您的问题是名为parameter的捕获组吃掉了该行的其余部分,而不是放弃一些内容给seperatordescription。要解决这个问题,可以使用惰性乘数器(*?+?),如下所示:

^(?<command>name|Name)'s:'s(?<parameter>['w@](?:['s'w._>@=*'^/'[']]*?['w.^/'[']])*?(?:,'s['w@](?:['s'w._>@=*'^/'[']]*?['w.^/'[']])*?)*?)(?<seperator>'s>>'s)*(?<description>'w['s'w]*['w.]*)?$

请注意,我还删除了一些编号的捕获组,并将一些设置为非捕获子组,因为我假设您并不真正希望它们捕获,因为您使用了命名组。非捕获子组与(?:something)类似。