私は次の文字列PCRE正規表現の重複一致
001110000100001100001
と、この表現
/[1]....[1]/g
を持って、これは2試合
になりますが、私は、それはまた、一致させたいです両者の間のパターンは、見えるように言えば、重なり合っている1
私は全くの手掛かりがありません。どうすればこのことができますか? 0の代わりに任意の文字を指定できます。
私は次の文字列PCRE正規表現の重複一致
001110000100001100001
と、この表現
/[1]....[1]/g
を持って、これは2試合
になりますが、私は、それはまた、一致させたいです両者の間のパターンは、見えるように言えば、重なり合っている1
私は全くの手掛かりがありません。どうすればこのことができますか? 0の代わりに任意の文字を指定できます。
一般的なやり方は、アンカリングされたポジティブ先読みの中にキャプチャ技術を使用することです。 preg_match_all
と、この正規表現を使用します。
(?=(1....1))
values are in $matches[1]
を参照してください:
$re = "/(?=(1....1))/";
$str = "001110000100001100001";
preg_match_all($re, $str, $matches);
print_r($matches[1]);
はlookahead referenceを参照してください:
前後参照は、実際の文字に一致しますが、その後、試合を放棄結果のみを返す:マッチするかマッチしないかch。それが「アサーション」と呼ばれる理由です。彼らは文字列内の文字を消費しませんが、一致が可能かどうかだけをアサートします。
(?=(regex))
:あなたが先読み内部の正規表現のマッチを保存したい場合は、に持っているが、このように、先読み内部の正規表現の周りにキャプチャ括弧を置きます。
ありがとう、私はすでに肯定的な先読みでarroundを演奏していますが、これは正しいことではありません。 –
'/(パターン)(。*?)\ 1 /'これを使用して、取得した2番目のグループ値を取得します。 lookbehindの必要はありません。 – Tushar
フルマッチが必要な場合は、[(?:(?<= 1).... 1)+](https://regex101.com/r/rN2uV2/1)を試してください –