如何防止此正则表达式匹配此模式?

时间:2015-12-23 01:13:34

标签: regex

如何阻止此正则表达式匹配第一行?我希望它匹配除[keyworddash]之外的每一行。基本上,如果有第二个匹配组,那么必须有冒号。

\[keyword(\d?):?(.*)\]
[keyworddash]
[keyword1]
[keyword2]
[keyword:default]
[keyword2:default]

以下是测试人员:http://www.regexpal.com/?fam=93714

3 个答案:

答案 0 :(得分:2)

这将通过假设所有行必须包含数字或冒号

来排除第一行
config.middleware.use Rack::SslEnforcer, except: '/search', strict: true

通过使用正向前瞻\[keyword(?=(\d|:))(\d?):?(.*)\] ,我们确保在(?=(\d|:))之后匹配的下一个字符是冒号或数字,否则匹配失败。

答案 1 :(得分:1)

您可以使用替换:

\[keyword(\d?)(?:\]|:(.*)\])

Example Here

因此,在这种情况下,(?:\]|:(.*)\])表示匹配以]结尾,否则第二个捕获组需要冒号。

答案 2 :(得分:1)

不要让结肠自行选择;使其成为可选的第二个词的一部分:

\[keyword\d?(:[a-z]+)?\]

针对您的示例输入,请参阅live demo

这意味着关键字可选地后跟一个数字后跟一个冒号和一些小写字母

如果第二个单词可以是"任何"更简单的正则表达式是:

\[keyword\d?(:.+)?\]

表达式不需要群组匹配,但如果您需要添加它们,请将其留给您。