本帖最后由 WHY 于 2023-6-11 20:59 编辑
可能是我没有表达清楚什么意思,也可能是我高估了有些人的理解能力。
顶楼的正则,抛开所谓的"平衡组",可以这样写:
'\((?>[^()]+|\(|\))*\)'
如果取消固化分组,可以这样写:
'\(([^()]+|\(|\))*\)'
这与《精通正则表达式(第三版)》第225页的例子:"(\\.|[^"\\]+)*" 如出一辙。
第268页 "使用固化分组和占有优先量词" 已经把引起灾难性回溯的原因及解决办法说得很清楚了。
什么时候匹配失败会引起灾难性回溯?
比如:- '(abcdefghijklmnopqrstuvwxyz' -match '\(([^()]+|\(|\))*\)'
复制代码 当然,如果认为《精通正则表达式(第三版)》很烂,或者认为这本书已经过时,那我无话可说。 |