我有文字
aaabbbbbabbbbab<name>NAME1</name>qweqwe<surname>SURNAME1</surname>
<name>NAME2</name>qweeeeeeeeeeeeeeeeqwe<surname>SURNAME1</surname>
和regexpr
(?<=<name>).+?(?=<\/name>)|(?<=<surname>).+?(?=<\/surname>)
给了我一个匹配的数组(组):
(
[0] => Array
(
[0] => NAME1
[1] => SURNAME1
[2] => NAME2
[3] => SURNAME1
)
)
我如何更改正则表达式以获得2个匹配的数组(1表示名称,2表示姓氏)
答案 0 :(得分:1)
$0
通常是完全匹配。要获得2个数组,可以在前瞻中捕获surname
:
(?<=<name>)[^<]+(?=.*?<surname>([^<]+))
Test at regex101;与s
flag一起使用可以根据需要使点也匹配换行符。
答案 1 :(得分:0)
答案 2 :(得分:0)
替代方法:
考虑使用:
preg_match_all('~<(?<tag>name|surname)>(?<value>.+?)</\1>~is', $input, $matches);
这将在$matches
数组中提供以下内容:
Array (
...
[tag] => Array (
[0] => name
[1] => surname
[2] => name
[3] => surname
)
[value] => Array (
[0] => NAME1
[1] => SURNAME1
[2] => NAME2
[3] => SURNAME1
)
)
现在,您可以使用tag
数组和value
数组匹配条目。