正则表达式 – 原子组和非捕获组
发布时间:2020-12-13 22:54:05 所属栏目:百科 来源:网络整理
导读:我想知道如何理解原子组,表示为(? 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仍然匹配两者. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- flex布局 滚动条失效
- 图像滤波和图像混合 Image Filtering and Hybrid Images
- c# – SynchronizationContext.Post到UI方法
- 如何在ruby_block中使用来自另一个厨师食谱的厨师助手库
- c# – 在xunit.net中有一个简单的方法来比较两个集合,而不考
- 简单总结C++中的修饰符类型
- c 11 – 使用std :: unique_ptr / std :: shared_ptr确认线
- 在rails上连接Ruby中的Sql server
- 抛开flash,自己开发实现C++ RTMP直播流播放器
- Ruby:堆栈级别太深(SystemStackError)maxlimit