带参数的正则表达式模式,希望在单词内允许有特殊符号
本文关键字:单词内 特殊符号 希望 参数 正则表达式 模式 | 更新日期: 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
描述:
我假设你的"预期输入"实际上不是预期输入,因为你的模式只有在command
被name
或Name
取代时才会匹配。
它通常也有助于解释什么不像预期的那样,因为我们不知道你真正想要这个正则表达式做什么。它也确实有助于说明你用什么语言做这件事,因为regex在几乎所有语言中都有不同的实现。
然而,让RegexBuddy咀嚼它,并添加您预期的输入,使我假设您的问题是名为parameter
的捕获组吃掉了该行的其余部分,而不是放弃一些内容给seperator
和description
。要解决这个问题,可以使用惰性乘数器(*?
或+?
),如下所示:
^(?<command>name|Name)'s:'s(?<parameter>['w@](?:['s'w._>@=*'^/'[']]*?['w.^/'[']])*?(?:,'s['w@](?:['s'w._>@=*'^/'[']]*?['w.^/'[']])*?)*?)(?<seperator>'s>>'s)*(?<description>'w['s'w]*['w.]*)?$
请注意,我还删除了一些编号的捕获组,并将一些设置为非捕获子组,因为我假设您并不真正希望它们捕获,因为您使用了命名组。非捕获子组与(?:something)
类似。