多回顾后发正则表达式
问题描述:
我有文字多回顾后发正则表达式
aaabbbbbabbbbab<name>NAME1</name>qweqwe<surname>SURNAME1</surname>
<name>NAME2</name>qweeeeeeeeeeeeeeeeqwe<surname>SURNAME1</surname>
和regexpr
(?<=<name>).+?(?=<\/name>)|(?<=<surname>).+?(?=<\/surname>)
这给了我1门匹配阵列(组)为:
(
[0] => Array
(
[0] => NAME1
[1] => SURNAME1
[2] => NAME2
[3] => SURNAME1
)
)
如何需要更改正则表达式以获得2个匹配数组(1为名称,2为姓氏)
答
$0
通常是充分的匹配。只得到2个阵列可以在先行捕捉surname
:
(?<=<name>)[^<]+(?=.*?<surname>([^<]+))
Test at regex101;如果需要,使用s
flag使点也匹配换行符。
答
另一种方法:
考虑使用:使用tag
阵列和value
阵列
Array (
...
[tag] => Array (
[0] => name
[1] => surname
[2] => name
[3] => surname
)
[value] => Array (
[0] => NAME1
[1] => SURNAME1
[2] => NAME2
[3] => SURNAME1
)
)
现在你可以匹配条目:
preg_match_all('~<(?<tag>name|surname)>(?<value>.+?)</\1>~is', $input, $matches);
这将给以下内容$matches
阵列。
这是XML吗?如果是这样,你会更好使用XML解析器 – 2015-02-05 14:09:17
@Alex K不,它是我有的简化的HTML。解析器可能会更好,但无论如何regexpr对我很有趣 – amplifier 2015-02-05 14:17:35
为什么你需要2个不同的数组? – anubhava 2015-02-05 14:29:52