我正在尝试从单词列表中获取所有匹配的模式;
$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];
}
}