Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 风味与效率_Regex - Fatal编程技术网

Regex 风味与效率

Regex 风味与效率,regex,Regex,就使用或、和运算符或背对背字符类之间的效率而言 在下面的字符串数据中 1A A1 $1 $$ 下列用语: ^[\w\W][\w\W]$ ^(?:\w|\W)(?:\w|\W)$ ^[\w&&\W](?:[\w&&\W])$ 一致性在这里会产生什么影响?除了个人希望使用表达式的风格之外,这里的真正区别是什么?使用regex调试器,您可以看到模式匹配方式的差异。主要区别在于速度: ^[\w\w][\w\w]$需要6个步骤来匹配其中一个字符串 ^(?:\w |

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

在下面的字符串数据中

1A
A1
$1
$$
下列用语:

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

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

^[\w&&\W](?:[\w&&\W])$
一致性在这里会产生什么影响?除了个人希望使用表达式的风格之外,这里的真正区别是什么?

使用regex调试器,您可以看到模式匹配方式的差异。主要区别在于速度:

  • ^[\w\w][\w\w]$
    需要6个步骤来匹配其中一个字符串
  • ^(?:\w |\w)(?:\w |\w)$
    需要10个步骤来匹配其中一个字符串
  • ^[\w&&\w](?:[\w&&\w])$
    需要8个步骤来匹配其中一个字符串
当然,这在很大程度上取决于正则表达式的风格、引擎的实现和可能的优化

编辑

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

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

IMHO,这里唯一显著的区别是第一种方法读写速度更快<代码>;)@sp00m不是更快吗=p第一个较短,但在我看来3个都很疯狂。您最好编写如下内容:
^(?s)$
^[\s\s]{2}$