我想匹配一个结构如下的行:
所以我写了这样的正则表达式:
new Regex(@"^\-{2,}\s*(\w+(\w+|\s)*)\s*\-{2,}$");
当我尝试匹配以下行时,这需要很长时间才能完成(没有等待它完成):
-------- Variable used for recipe visualization only - Not loaded into PLC --------
我认为其中有很多比赛并且正则表达式很难列举所有这些比赛,但我不确定。
环境信息:Windows 7,框架3.5
谢谢
编辑:感谢您的帮助,我提出了一个有效的正则表达式:
^-{2,}\s*(?!\-)(\w(?:\w|\s|\-)+)(?<!\-)\s*-{2,}$
所以解释:
如果你看到有问题请告诉我
答案 0 :(得分:4)
将嵌套分组展开为
^-{2,}\s*(\w+(?:\s+\w+)*)\s*-{2,}$
^^^^^^^^^^^
否则,您的模式将倾向于catastrophic backtracking。
请参阅regex demo
或者,使用原子组禁用任何回溯到交替组:
^-{2,}\s*((?>\w+(?:\w+|\s)*))\s*-{2,}$
^^^ ^
通常,避免在较长的模式中使用嵌套量词(如(\w+|\s)*
)中的替换。