我试图了解正确的用法 »原子分组«又名»独立子表达式«又名»非回溯子模式« [这是我为同一件事找到的术语,但这并没有使它变得不那么复杂]
egrep '123(?>fruit|juiceomatic)machine'
意思是:寻找123fruitjuiceomaticmachine
- 但停止尝试匹配[其余]圆括号的内容 if
123
后面跟着除fruit
!以外的任何内容
它是否正确?我错过了什么重要的事情吗?
我问这个问题是因为我大多数时候都达到了预期的结果,但我不能 100% 确定这是因为我做得对还是我只是做了幸运的猜测。
答案1
这不是扩展正则表达式 (ERE)。egrep
会将其解释为123
后跟>fruit
or juiceomatic
(?
被忽略)后跟machine
。这意味着它将匹配:
123>fruitmachine
123>juiceomaticmachine
但不是:
123fruitjuiceomaticmachine
该(?>...)
符号来自PCRE,意思是非捕获原子团, 看pcresyntax(3)
。您可以将它们与 GNU grep 和-P
开关一起使用。
如果我理解正确的话,你需要123
遵循,fruit
而这又可能是紧随其后,juiceomatic
或者什么也不跟随。在这种情况下,我认为123fruit(|juiceomatic)machine
这就是您想要的 ERE。