質問preg_match_all how to get *all* combinations? Even overlapping onesと似たようなことをしたいと思います。パターンが重複していても一致するパターンを見つけることができます。ちょうど最初のもの)。preg_match_allと重複して一致するパターンと繰り返し文字で終了するパターン
しかし、追加の制約があります。私のパターンは繰り返し指定子で終わることができます。のは、一例として+
を使用してみましょう:インデックス0から始まるインデックス1
"A"
から始まるインデックス0"A"
から始まる
- マッチ
"AA"
:これは、パターン/A+/
と対象"AA"
は3試合を返すべきこと
上記の質問に示された解決策に基づいて、以下のパターンは、3つの結果すべてに一致しません。
- 柄
/(?=(A+))/
は最初の2試合を見つけなく、最後の1 - 柄
/(?=(A+?))/
は、最後の2試合ではなく、今の最初の1つの
私の唯一の回避策は貪欲を維持することです見つけました例えば、それはもはや一致しなくなるまでこの操作を繰り返し、各試合マイナスその最後の文字に対してパターンを適用したバージョンと試してみてください。
$all_matches = array();
$pattern = 'A+';
preg_match_all("/(?=($pattern))/", "AA", $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
do {
$all_matches[] = $match[1];
$subject = substr($match[1], 0, -1);
}
while (preg_match("/^($pattern)/", $subject, $match));
}
は、任意のはありますpreg_match_allなどを使用してこれを達成するためのより良いソリューションですか?
あなたは1つの正規表現マッチング操作では不可能で一つの指標、でいくつかの試合を取得したいです。あなたは実際には純粋な正規表現の解決法を望んでいません。 1)文字列の部分文字列のすべての組み合わせを見つけ、2)パターンと完全に一致する部分文字列のみを保持する必要があります。 –