3

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

在下面的字符串数据中。

1A
A1
$1
$$

以下表达式:

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

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

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

一致性将如何影响这里以及这里的真正区别是什么,除了个人使用表达的期望风格?

4

1 回答 1

3

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

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

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

编辑

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

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

于 2013-10-10T16:13:03.137 回答