0

スキルを向上させるために、PHP Regex をいじっています。

プラス記号を理解するのに苦労しているので、次のコードを書きました。

$subject = 'aaa bbb cccc dddd';
echo preg_replace('/(\w)/',"$1*",$subject) . '<br>';
echo preg_replace('/(\w+)/',"$1*",$subject) . '<br>';
echo preg_replace('/(\w)+/',"$1*",$subject) . '<br>';

結果は次のとおりです。

a*a*a* b*b*b* c*c*c*c* d*d*d*d*
aaa* bbb* cccc* dddd*
a* b* c* d*

なぜこれらの結果が得られるのか理解できません。誰かがこの例で何が起こっているのか説明してもらえますか

4

2 に答える 2

1

正規表現では、+を意味しone or more of the preceding character or groupます。

パターン, は、1 つのグループ内の 1/(\w)/つの単語文字 ( ) に一致することを意味します。a-zA-Z0-9_したがって、各文字が一致します。最初の一致グループはa. 置換は、個々の文字をその文字の後にアスタリスクを付けたものに置き換えます。

パターン/(\w+)/は、グループ内の 1 つ以上の単語文字に一致します。したがって、文字の各ブロックに一致します。最初の試合グループはaaa. 置換は、アスタリスクが続く複数の文字の各ブロックを置換します。

最後のパターン/(\w)+/はもう少しトリッキーですが、グループ内の 1 つの単語文字に一致し+ますが、グループの 1 つ以上に一致することを意味します。したがって、最初の一致は になりますaが、最後に一致したグループ (もちろん、その後にアスタリスクが続きます) との一致がなくなるまで、置換によってすべてのグループが置き換えられます。したがって、string を試した場合aaab ccc、結果は になりますb* c*b最初のシーケンスで最後に一致したグループであるため、置換ではそれが使用されます。

于 2013-06-20T21:10:04.890 に答える