|
|
1
4
绝对是指数行为。你有那么多
特别是我认为:
可能需要重新考虑,因为他们将强制重新尝试另一场比赛。另外,它们在匹配方面也有重叠。例如,它们都匹配EDB,但如果其中一个失败并试图回溯,另一个部分可能会有相同的行为。
所以简而言之,不要使用
|
|
|
2
5
您的表达式是否会触发python re引擎中的指数行为? This article 解决问题。如果你有时间的话,你可能想尝试在一个使用这些想法开发的重新引擎中运行你的表达式。 |
|
|
3
2
我认为你经历了所谓的“灾难性回溯”。 您的regex有许多可选/可选部分,所有部分仍然尝试匹配,因此在本地失败时,前面的子表达式会将字符返回给下面的表达式。这会导致regex中出现后退和第四种行为,执行时间呈指数级增长。 Python(2.7 +)?,我不确定)支持原子分组和所有格量词,您可以检查regex,以确定应该匹配或整体失败的部分。不必要的回溯可以用它来控制。 |
|
|
4
2
灾难性的回溯!
示例和调试器: |
|
|
5
2
感谢所有的回答,这是非常有帮助的。最后,令人惊讶的是,它很容易加速。这是原始的regex:
我注意到结尾的d*不是我真正需要的,所以我修改如下:
现在它几乎在65536字符串上瞬间工作。我想现在我只需要确保regex真正匹配我需要它匹配的字符串… |
|
|
6
1
你已经给了自己答案:正则表达式是复杂和模糊的。 您应该尝试找到一个更容易处理的不那么复杂、更独特的表达式。或者告诉我们你想完成什么,我们可以帮助你找到一个。
编辑
___,如果你只想允许
|
|
|
DotFX · RegEx捕获关键字前但括号后的所有内容 1 年前 |
|
|
Andrus · 如何在sql中查找第二个匹配项 1 年前 |
|
|
iato · 确保正则表达式不从命名材料中的数字中提取 1 年前 |
|
|
vr8ce · 非成对标记中特定字符的正则表达式 1 年前 |
|
|
MARTIN · 交换第一个和最后一个单词,反转所有中间的字符 1 年前 |
|
|
Carsten · 使用最近的搜索模式更改文本块 1 年前 |