我有一些类似的数据:
aaa1|aaa2|ZZZ|aaa3|aaa4|aaa5|ZZZ|aaa6|aaa7
我希望匹配所有“aaa [0-9]”BETWEEN“ZZZ”(不是外面的那些)。
所以我有一些PHP代码:
$string = "aaa1aaa2zzzzaaa3aaa4aaa5zzzzaaa6aaa7"; preg_match_all("/zzzz.*(aaa[0-9]).*zzzz/", $string, $matches, PREG_SET_ORDER); print_r($matches);
但它只输出:
Array ( [0] => Array ( [0] => zzzzaaa3aaa4aaa5zzzz [1] => aaa5 ) )
除了“aaa5”之外,我想要“aaa3”,“aaa4”。
有没有办法通过1次调用preg_match_all()
来执行此操作?
答案 0 :(得分:1)
检查字符串是否出现在一个分隔符字符串(zzzz)之前,而不是在两个分隔符字符串之前:
$string = "aaa1aaa2zzzzaaa3aaa4aaa5zzzzaaa6aaa7";
preg_match_all("/aaa[0-9](?=.*?zzzz)(?!(?>.*?zzzz).*?zzzz)/", $string, $matches, PREG_SET_ORDER);
print_r($matches);
答案 1 :(得分:0)
我认为通过一次通话无法做到这一点。你需要做一个调用来拉出你的分隔符之间的内容(zzzz)然后另一个调用来拉出所有匹配的对。
if (preg_match('/zzzz(.*?)zzzz/', $string, $matches)) {
preg_match_all('/(aaa\d)/', $matches[1], $newmatches);
print_r($newmatches);
} else {
echo "No match";
}