-3

您好,请告诉我我需要在参数部分(里面只允许一次>只允许一次。

工作一:

^(?<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:名称
ParameterPart1:param> eter1
ParameterPart2:parameter2
描述:描述

4

1 回答 1

1

我假设您的“预期输入”实际上不是预期输入,因为您的模式只有在command替换为nameor时才会匹配Name

它通常也有助于解释什么不符合预期,因为我们不知道你真正想要这个正则表达式做什么。说明您正在使用哪种语言确实也很有帮助,因为几乎所有语言中正则表达式的实现方式都不同。

但是,让 RegexBuddy 咀嚼它,并添加您的预期输入让我假设您的问题是名为的捕获组parameter吃掉了该行的其余部分,而不是放弃一些内容到seperatorand 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).

于 2013-05-06T17:10:54.540 回答