Dreamweaver中使用正则表达式搜索结果不一致是bug吗?
原因分析
这是Dreamweaver两种查找功能的正则引擎配置差异导致的,既不是操作错误,也不属于功能bug:
Ctrl+F触发的当前页单文件查找,默认开放了更高的正则回溯阈值,且默认支持点号.匹配换行符,你写的<a(.*\n.*)*虽然存在嵌套量词的性能缺陷,但依然可以完成从第一个<a到文档末尾的匹配。Ctrl+Shift+F触发的全局多文件查找替换功能,为了避免批量扫描文件时正则回溯过高导致程序卡死,做了两层限制:一是默认点号.不匹配换行符,二是设置了严格的最大回溯步数。你使用的正则在匹配到<a之后,嵌套的(.*\n.*)*会触发大量回溯,直接触及阈值导致匹配终止,最终仅返回匹配成功的<a部分。
解决方法
替换为无性能问题的跨行匹配正则即可在两种查找模式下都生效:
你要匹配第一个<a标签到文档末尾的需求,直接使用正则<a[\s\S]*即可,[\s\S]可以匹配所有字符(包括换行符),没有嵌套量词的回溯风险,兼容性也更好。
如果要保留原有正则的写法,也可以在全局查找的设置项中找到「点号匹配换行」(部分版本显示为Dot matches newline)的选项,勾选后再执行查找即可。
内容的提问来源于stack exchange,提问作者ilmel
相关产品推荐
相关产品推荐

