![]() |
1
6
在这种情况下,最好使用非贪婪量词。
以这个字符串为例
非贪婪量词 \[\[.+?\]\] Atom # 1 2 3 4 5
展望未来: \[\[(?:(?!\]\]).)+\]\] Atom # 1 2 3 4 5 6 7
所以看起来非贪婪量词要做的工作更少。 免责声明:这是一个人工示例,实际性能可能会有所不同,具体取决于regex引擎的输入、实际表达式和实现。我只有98%的把握,我在这里概述的是实际发生的事情,所以我愿意改正。另外,和所有的性能技巧一样,不要把这当作表面价值,如果你想确定的话,做你自己的基准比较。 |
![]() |
2
3
另一种变体:
它既不使用非贪婪量词,也不使用look aheads。它允许一个
这种模式最好与FSA编译regex引擎一起使用。在回溯引擎上,它可能会比不贪婪的变体慢。 |
![]() |
3
1
你用哪种正则表达式?如果它支持所有格量词,有一个更好的选择:
Java、JGSoft、PCRE(PHP)、Oniguruma(Ruby 1.9)和perl5.12风格支持所有格量词。所有这些口味也都支持原子团,可以用来达到同样的效果:
NET风格支持原子组,但不支持所有格量词。 |
![]() |
4
0
我认为最好使用非贪婪限定符。你确定你读到的那篇文章没有说“小心 “匹配吗?” |
![]() |
DotFX · RegEx捕获关键字前但括号后的所有内容 5 月前 |
![]() |
Andrus · 如何在sql中查找第二个匹配项 5 月前 |
![]() |
iato · 确保正则表达式不从命名材料中的数字中提取 6 月前 |
![]() |
vr8ce · 非成对标记中特定字符的正则表达式 6 月前 |
![]() |
MARTIN · 交换第一个和最后一个单词,反转所有中间的字符 6 月前 |
![]() |
Carsten · 使用最近的搜索模式更改文本块 6 月前 |