微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则表达式 – 原子组和非捕获组

>我想知道如何理解原子组,表示为(?> expr)?它是什么
用于?


http://www.regular-expressions.info/atomic.html,
唯一的例子是当expr时
交替,如正则表达式
a(?> bc | b)c匹配abcc但不匹配
ABC.有没有例子
expr不是交替?
>是原子组还是非捕获
组,表示为(?:expr),
同一件事情?

请注意,我并不仅限于一种特殊的Regex风格.

1)当使用Atomic组时,如果没有为给定字符串匹配完整的正则表达式,则正则表达式引擎将不会回溯进一步的排列.无论何时使用交替,如果匹配成功,正则表达式将立即尝试匹配表达式的其余部分,但将跟踪其他可能的替换位置.如果表达式的其余部分不匹配,则正则表达式将返回到先前提到的位置并尝试其他组合.如果使用了原子分组,那么正则表达式引擎就不会跟踪先前的位置,只会放弃匹配.上面的例子并没有真正解释使用Atomic组的目的.它只是清楚地证明了回溯的消除.原子组将在使用贪婪量词的某些场景中使用,并且即使没有交替也可以进一步组合.

2)原子团和非捕获团是不同的.非捕获组根本不保存匹配的值.如果需要进一步的组合,原子组只是禁用回溯.

例如,正则表达式a(?:bc | b)c匹配abcc和abc(不捕获匹配),而(?> bc | c)c仅匹配abcc.如果正则表达式是(?> b | bc)c,则它只匹配abc,而(?:b | bc)c仍然匹配两者.

原文地址:https://www.jb51.cc/regex/356582.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐