味道与效率

时间:2013-10-10 15:58:11

标签: regex

就使用ORAND运算符或背靠背字符类之间的效率而言。

在下面的字符串数据中。

1A
A1
$1
$$

以下表达式:

^[\w\W][\w\W]$

^(?:\w|\W)(?:\w|\W)$

^[\w&&\W](?:[\w&&\W])$

这里的一致性如何影响,除了个人使用表达式的个人风格之外,这里有什么区别?

1 个答案:

答案 0 :(得分:3)

使用http://regex101.com/正则表达式调试器,您可以看到模式匹配方式的差异。主要区别在于速度:

  • ^[\w\W][\w\W]$需要6个步骤来匹配您的一个字符串
  • ^(?:\w|\W)(?:\w|\W)$需要10个步骤来匹配您的一个字符串
  • ^[\w&&\W](?:[\w&&\W])$需要8个步骤来匹配您的一个字符串

当然,这在很大程度上取决于正则表达式的风格,引擎的实现以及可能的优化。

修改

  • ^..$还需要6个步骤

步骤的数量并不一定与速度直接相关,但在大多数情况下(如果正则表达式足够简单),可读且更易于维护的正则表达式提供了比xy微秒的速度节省更多的好处(再次取决于用例和输入数据)。