作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
(?>expr)
) 以及它的用途是什么?在 https://www.regular-expressions.info/atomic.html ,唯一的例子是当 expr
是交替时,例如正则表达式 a(?>bc|b)c
匹配 abcc
但不匹配 abc
。有没有 expr
不交替的例子?(?:expr)
) 是同一件事吗?最佳答案
使用原子组时,如果完整的正则表达式尚未与给定字符串匹配,则正则表达式引擎将不会回溯以进行进一步的排列。
每当您使用替换时,如果成功,正则表达式将立即尝试匹配表达式的其余部分。尽管如此,它仍会跟踪可能进行其他替换的位置。如果表达式的其余部分不匹配,正则表达式将返回到之前提到的位置并尝试其他组合。如果使用了原子分组,则正则表达式引擎将不会跟踪先前的位置,并且只会放弃匹配。
上面的例子没有解释使用原子组的目的。它只是演示了回溯的消除。原子组将用于使用贪婪量词的特定场景,并且即使没有交替,也可以进行进一步的组合。
原子基团和非捕获基团是不同的。非捕获组不会保存匹配值,而原子组会在需要进一步组合时禁用回溯。
例如,正则表达式 a(?:bc|b)c
匹配 abcc
和 abc
(不捕获匹配项) ,而 a(?>bc|c)c
仅匹配 abcc
。如果正则表达式为 a(?>b|bc)c
,则仅匹配 abc
,而 a(?:b|bc)c
> 仍然会匹配两者。
关于regex - 原子基团和非捕获基团有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6488944/
我是一名优秀的程序员,十分优秀!