在regexp中哪个更好?

时间:2012-03-26 20:11:50

标签: regex

所以,我正在编写一个简短(简单)的正则表达式,但我可以想到两种可能的方法。它们看起来都很好,但我不确定哪一个更好。

我想用这种模式实现的目标(按层次排序):

  • 速度
  • 可读性
  • Sexyness

正则表达式需要在每行的开头匹配两个字符之一(假设它们是#~):

  • ^[#~]
  • ^(#|~) 编辑,因为^#|~没有做我想要的事情,我更正了。

我喜欢他们两个因为不同的原因(其中大多数是美学原因);第二个的奖励是它缩短了一个字节。

谢谢!

3 个答案:

答案 0 :(得分:6)

^#|~^[#~]不同。 ^#|~将匹配字符串中间的~,因为{{1} }的优先级低于|。如果您不介意额外的捕获组,则表示^^(?:#|~)的正确方式。

^(#|~)与正确的正则表达式^[#~]进行比较,我说前者完全胜出。 (通常,字符类比^(?:#|~)更有效,因为后者不太专业。)

答案 1 :(得分:2)

这个问题有一个错误的前提。提供的两个正则表达式在所有正则表达式引擎上都不相同。

  • ^[#~]:仅在一行开头匹配#~
  • ^#|~:这将匹配行首的#和字符串中任意位置的~

因此,我会选择第一个,因为它具有您正在寻找的语义。

对于正则表达式,以及一般的代码,总是更喜欢更具可读性/表现力的解决方案而不是感知性能优势。仅在分析器证明性能确实重要时才进行性能选择。

答案 2 :(得分:1)

第二个字节缩短的事实,正如您可以想象的那样,并不完全相关。我自己会使用第一个(^[#~])因为字符类很容易理解。 (另外,如上所述,第二个不等同于第一个。但即使你可以重写第二个,也不要:p)