我找到的所有例子都是?>构造可以用更简单的结构编码,更好的效率的解释令人困惑(至少对我而言)。有没有人对这种结构有实际用途?
答案 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”,匹配),所以我仍在寻找(?> ...)的实际例子,或者没有人使用这个构造?