2

両方の表現が機能します。

E1=> work(?:\s+)?group 

E2=> work(\s+)?group

スペースが改行 (\s+) である可能性があることを考慮して、workgroupORをキャプチャする必要がありますか?work group

ただし、最初の式には非キャプチャ グループがあります (?:そして、Regex のパフォーマンス/高速出力でそれが悪いか良いか疑問に思っています。つまり、パフォーマンスの観点から、最高の式は何ですか?

4

1 に答える 1

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
于 2014-04-26T22:44:28.053 に答える