複数のオカレンスを 1 つのグループにまとめる正規表現が必要です。例として、次のフレーズを想像してください。
cat | likes her | mat
dog | goes to his | basket
フレーズの各パートを定位置に取り込めるようにしたい
array(
0 => cat likes her mat
1 => cat
2 => likes her
3 => mat
)
明らかに使用:
$regex = '/(cat|dog)( likes| goes| to| his| her)* (mat|basket)/';
preg_match($regex, "The cat likes her mat", $m);
与えます:
array(
0 => cat likes her mat
1 => cat
2 => likes
3 => her
4 => mat
)
しかし、途中で一致する単語の数に関係なく、常に $m[3] にマット/バスケットが必要です。
私はこれを試しました:
$regex = '/(cat|dog)(?:( likes| goes| to| his| her)*) (mat|basket)/';
複数のサブパターンのキャプチャを防止しようとしますが、これにより最初の単語のみがキャプチャされます。
array(
0 => cat likes her mat
1 => cat
2 => likes
3 => mat
)
フレーズの中央部分全体 (ワードの長さは不明) をキャプチャする方法を知っている人はいますか?それでも予測出力に入れることができます。
ところで(cat|dog).*?(mat|basket)
、途中で許可されている指定された単語しかないため、使用できません。
上記は単なる例です。実際の使用法には、サブパターンごとにさらに多くのオプションがあります。
ありがとう。