私の検索テキストは次のとおりです。
...
...
var strings = ["aaa","bbb","ccc","ddd","eee"];
...
...
多くの行(実際にはjavascriptファイル)が含まれていますが、変数文字列の値を解析する必要があります。つまり、aaa、bbb、ccc、ddd、eeeです。
以下はPerlコードです、または下部でPHPを使用してください
my $str = <<STR;
...
...
var strings = ["aaa","bbb","ccc","ddd","eee"];
...
...
STR
my @matches = $str =~ /(?:\"(.+?)\",?)/g;
print "@matches";
上記のスクリプトはすべてのインスタントに一致することはわかっていますが、他の行の文字列( "xyz" )も解析します。だから私は文字列をチェックする必要がありますvarstrings=
/var strings = \[(?:\"(.+?)\",?)/g
上記の正規表現を使用すると、aaaが解析されます。
/var strings = \[(?:\"(.+?)\",?)(?:\"(.+?)\",?)/g
上記を使用すると、aaa、およびbbbが取得されます。したがって、正規表現の繰り返しを避けるために、以下のように「+」数量詞を使用しました。
/var strings = \[(?:\"(.+?)\",?)+/g
しかし、私はeeeしか取得しなかったので、私の質問は、 「+」数量詞を使用したときにeeeのみを取得したのはなぜですか?
更新1:PHP preg_match_allを使用する(より多くの注意を引くためにそれを行う:-))
$str = <<<STR
...
...
var strings = ["aaa","bbb","ccc","ddd","eee"];
...
...
STR;
preg_match_all("/var strings = \[(?:\"(.+?)\",?)+/",$str,$matches);
print_r($matches);
アップデート2:なぜeeeと一致したのですか?の貪欲さのため(?:\"(.+?)\",?)+
。貪欲を取り除くことにより、 /var strings = \[(?:\"(.+?)\",?)+?/
aaaは一致します。しかし、なぜ1つの結果しかないのでしょうか。単一の正規表現を使用してそれを実現する方法はありますか?