所以,我正在编写一个简短(简单)的正则表达式,但我可以想到两种可能的方法。它们看起来都很好,但我不确定哪一个更好。
我想用这种模式实现的目标(按层次排序):
正则表达式需要在每行的开头匹配两个字符之一(假设它们是#
和~
):
^[#~]
^(#|~)
编辑,因为^#|~
没有做我想要的事情,我更正了。我喜欢他们两个因为不同的原因(其中大多数是美学原因);第二个的奖励是它缩短了一个字节。
谢谢!
答案 0 :(得分:6)
^#|~
与^[#~]
不同。 ^#|~
将匹配字符串中间的~
,因为{{1} }的优先级低于|
。如果您不介意额外的捕获组,则表示^
或^(?:#|~)
的正确方式。
将^(#|~)
与正确的正则表达式^[#~]
进行比较,我说前者完全胜出。 (通常,字符类比^(?:#|~)
更有效,因为后者不太专业。)
答案 1 :(得分:2)
这个问题有一个错误的前提。提供的两个正则表达式在所有正则表达式引擎上都不相同。
^[#~]
:仅在一行开头匹配#
或~
^#|~
:这将匹配行首的#
和字符串中任意位置的~
因此,我会选择第一个,因为它具有您正在寻找的语义。
对于正则表达式,以及一般的代码,总是更喜欢更具可读性/表现力的解决方案而不是感知性能优势。仅在分析器证明性能确实重要时才进行性能选择。
答案 2 :(得分:1)
第二个字节缩短的事实,正如您可以想象的那样,并不完全相关。我自己会使用第一个(^[#~]
)因为字符类很容易理解。
(另外,如上所述,第二个不等同于第一个。但即使你可以重写第二个,也不要:p)