这两个表达对我有用:
E1=> work(?:\s+)?group
E2=> work(\s+)?group
我需要捕获workgroup
OR work group
,考虑到空格可能是换行符(\ s +)?
然而,第一个表达式有一个非捕获组(?:
,我想知道它是否在正则表达式的性能/快速输出中更差或更好。换句话说,就性能而言,是什么是最好的表达方式吗?
答案 0 :(得分:1)
答案实际上取决于您正在使用的正则表达式引擎的内部。
在Javascript中,我不知道哪个更快。
在PHP中,捕获组可以更快一些。这是一个简单的测试,其中包含正则表达式的简化版本。
<?php
$string = "WORD1".str_repeat(" someword",100000);
$regex1="~WORD1(?:\s+\w+){0,2}~";
$regex2="~WORD1(\s+\w+){0,2}~";
$start=microtime(TRUE);
for ($i=1;$i<1000000;$i++) preg_match($regex1,$string);
$noncapend=microtime(TRUE);
for ($i=1;$i<1000000;$i++) preg_match($regex2,$string);
$withcapend=microtime(TRUE);
$noncap = $noncapend-$start;
$withcap = $withcapend-$noncapend;
$diff = 100*($withcap-$noncap)/$noncap;
echo "Non-Capture Group: ".$noncap."<br />";
echo "Capture Group: ".$withcap."<br />";
echo "difference: ".$diff." percent longer<br />";
?>
输出:
请注意,每次都会得到不同的结果。
Non-Capture Group: 1.092001914978
Capture Group: 1.0608019828796
difference: -2.857131628658 percent longer