正则表达式:匹配不包含子字符串的字符串不在行的开头

时间:2018-01-17 21:52:55

标签: regex

^(pause|unpause)\s+chef\s+(on\s+)?(\S+)\s+(.*)(--dryrun)?

我想:

pause chef on staging nodes AND test --dryrun

匹配并在两个单独的匹配组中使用“nodes AND test”和“--dryrun”。

就目前而言,我在一个匹配组中得到“节点和测试--dryrun”。

我在周围搜索并使用负向前瞻似乎不适用于我的目的,因为我想要任何不包含“--dryrun”的东西,但不是在行的开头。

谢谢!

1 个答案:

答案 0 :(得分:0)

问题是您通过(--dryrun)跟随?是可选的。由于(.*)在它之前,它将匹配与表达式匹配的其余部分一致的最长字符串,并且由于--dryrun是可选的,因此它会吞噬它。

使用非贪婪量词使其使用较短的匹配。

您还需要在该行的末尾锚定。否则,.*将匹配staging后的空字符串,并且可选的--dryrun将不匹配任何内容(因为它是可选的)。

^(pause|unpause)\s+chef\s+(on\s+)?(\S+)\s+(.*?)(--dryrun)?

DEMO