2

複数のオカレンスを 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)、途中で許可されている指定された単語しかないため、使用できません。

上記は単なる例です。実際の使用法には、サブパターンごとにさらに多くのオプションがあります。

ありがとう。

4

2 に答える 2