【发布时间】:2020-01-04 19:46:17
【问题描述】:
我想使用正则表达式匹配任何以“abc”开头并以“xyz”结尾的多行文本,我有两个正则表达式模式可供选择:
- ^abc(.|\n|\r)*xyz$
- ^abc[\s\S]*xyz$
除了性能之外,两者是否等价?
哪个更好,为什么?
【问题讨论】:
-
现在是第二个,因为它不使用捕获的组:p
-
两者是不同的模式
-
对于“哪个更好以及为什么”没有独立于引擎的答案。根据regex标签的规则:“由于正则表达式没有完全标准化,所有带有这个标签的问题还应该包含一个标签,指定适用的编程语言或工具。”
-
@joanis 有两个答案清楚地解释了所问的问题,
tim's答案谈到了两种模式之间的差异,@Toto 的答案谈到了性能 -
答案是:都不用,它们都不好。使用
.,带有必要的选项(在Ruby 中通常是s,或m)或不使用(在所有POSIX 风格中)。在 JS ECMAScript 旧版本中,有[^]。.= 好,[\s\S]= 一般,(.|\n|\r)= 最差。