实际应用?> (原子分组)正则表达式构造?

时间:2018-03-25 05:49:30

标签: regex atomic

我找到的所有例子都是?>构造可以用更简单的结构编码,更好的效率的解释令人困惑(至少对我而言)。有没有人对这种结构有实际用途?

3 个答案:

答案 0 :(得分:0)

观察以下正则表达式

\b(integer|intrinsic|intractable|intergalactic)\b

相当于

\bint(eger|rinsic|ractable|ergalactic)\b

这相当于

\bint(e(ger|rgalactic)|r(insic|actable))\b

但是,如果最后一个正则表达式匹配字符串的开头"整数"并且由于字符串边界失败\ b匹配正则表达式失败将回溯并尝试这个小词汇树的所有其余选项,如果你添加原子分组

\bint(?>e(ger|rgalactic)|r(insic|actable))\b

您可以使用这些可能的匹配相互排斥的知识(它们可能非常适合),使引擎在匹配其中一个选项后不会回溯。

答案 1 :(得分:0)

一个更好的解决方案是 \ d +(?!。) 匹配不带句号的数字。 此正则表达式匹配12,但也匹配123。 原子团可以解决这个问题 (?> \ d +)(?!。)

答案 2 :(得分:-1)

一个更好的例子是 (?(大于书籍的)| 的)(取值的) 字符串“books”与“book”+“s”

匹配

注意位置和|

这是一个人为的例子(但比经常传播的(?> bc | b)c更好,据我所知,没有任何目的,因为只有“abcc”,但绝不是“abc”,匹配),所以我仍在寻找(?> ...)的实际例子,或者没有人使用这个构造?