単語のリストから一致するすべてのパターンを取得しようとしています。
$pattern = '/^(ab|abc|abcd|asdf)/';
preg_match_all($pattern, 'abcdefgh', $matches);
「 ab、abc、abcd」を取得したい
しかし、これは ' ab ' だけを返します。パターンを分解した後にパターンをループすると機能します。
シングルマッチで解決する方法はありますか?
単語のリストから一致するすべてのパターンを取得しようとしています。
$pattern = '/^(ab|abc|abcd|asdf)/';
preg_match_all($pattern, 'abcdefgh', $matches);
「 ab、abc、abcd」を取得したい
しかし、これは ' ab ' だけを返します。パターンを分解した後にパターンをループすると機能します。
シングルマッチで解決する方法はありますか?
正規表現は、文字列を照合するときに文字を消費するため、重複する一致をネイティブに見つけることはできません。
先読みアサーションなどの拡張機能をキャプチャ グループと一緒に使用できますが、これには醜い構造が必要です。
preg_match_all(
'/^
(?:(?=(ab)))?
(?:(?=(abc)))?
(?:(?=(abcd)))?
(?:(?=(asdf)))?
/x',
$subject, $result, PREG_SET_ORDER);
for ($matchi = 0; $matchi < count($result); $matchi++) {
for ($backrefi = 0; $backrefi < count($result[$matchi]); $backrefi++) {
# Matched text = $result[$matchi][$backrefi];
}
}