我有这个文本块
[block]
[item]catch me[/item]
[item]catch me[/item]
[item]catch me[/item]
[/block]
项目数量是可变的。现在我希望匹配每个“抓住我”,最好是在一个数组中。我有一个表达式,但这只会匹配最后一项:
\[block\](?:\s*\[item\](.*?)\[/item\]\s*)+\[/block\]
有什么想法吗?
谢谢&问候, 亚历
答案 0 :(得分:3)
您没有显示如何使用表达式。你必须使用preg_match_all()
,你也可以简化你的表达:
// assuming $str contains the text to match
preg_match_all("#\[item\](.*?)\[/item\]#", $str, $matches);
print_r($matches);
给出
Array
(
[0] => Array
(
[0] => [item]catch me[/item]
[1] => [item]catch me[/item]
[2] => [item]catch me[/item]
)
[1] => Array
(
[0] => catch me
[1] => catch me
[2] => catch me
)
)
$matches[1]
包含您要查找的内容。
答案 1 :(得分:1)
如果我做对了,你可能需要分两步完成,比如:
$items_regex = '/\[block\]((?:\s*\[item\].*?\[/item\]\s*)+?)\[/block\]/';
$item_regex = '/\[item\](.*?)\[/item\]/';
if (preg_match($items_regex, $str, $items)) {
$items = end($items);
if (preg_match_all($item_regex, $items, $match)) {
$match = end($match);
// do stuff
}
}