如何阻止此正则表达式匹配第一行?我希望它匹配除[keyworddash]
之外的每一行。基本上,如果有第二个匹配组,那么必须有冒号。
\[keyword(\d?):?(.*)\]
[keyworddash]
[keyword1]
[keyword2]
[keyword:default]
[keyword2:default]
答案 0 :(得分:2)
这将通过假设所有行必须包含数字或冒号
来排除第一行config.middleware.use Rack::SslEnforcer, except: '/search', strict: true
通过使用正向前瞻\[keyword(?=(\d|:))(\d?):?(.*)\]
,我们确保在(?=(\d|:))
之后匹配的下一个字符是冒号或数字,否则匹配失败。
答案 1 :(得分:1)
答案 2 :(得分:1)
不要让结肠自行选择;使其成为可选的第二个词的一部分:
\[keyword\d?(:[a-z]+)?\]
针对您的示例输入,请参阅live demo。
这意味着关键字可选地后跟一个数字后跟一个冒号和一些小写字母。
如果第二个单词可以是"任何"更简单的正则表达式是:
\[keyword\d?(:.+)?\]
表达式不需要群组匹配,但如果您需要添加它们,请将其留给您。