我有文字:
<b>Title1:</b><br/><b>Title2:</b> Value1<br/><b>Title3:</b> Value2<br/><b>Title4:</b> Value3<br/>Value4<b>Title5:</b> Value5<br/>
要获取的正则表达式:
[0] => <b>Title1:</b><br/>
[1] => <b>Title2:</b> Value1<br/>
[2] => <b>Title3:</b> Value2<br/>
[3] => <b>Title4:</b> Value3<br/>Value4
[4] => <b>Title5:</b> Value5<br/>
我的变体无法正常工作:
<b>(.*?)</b>(.*?)
答案 0 :(得分:0)
这样的资源在排除正则表达式时非常有用:https://regex101.com/
好像您在<b>(.*?)</b>(.*?)
中缺少转义符
<b>(.*?)<\/b>(.*?)
应该阻止对该当前正则表达式引发错误,并使您接近结果,但您需要多花点功夫才能获得所需的准确结果。
<b>(.*?)<\/b>(.*?)<br\/>
应该更近一些,因为您似乎想包含break标签。
答案 1 :(得分:0)
您可以提前使用preg_split()
:
<?php
$split = preg_split( '/(?=<b>Title\d+:)/', '<b>Title1:</b><br/><b>Title2:</b> Value1<br/><b>Title3:</b> Value2<br/><b>Title4:</b> Value3<br/>Value4<b>Title5:</b> Value5<br/>' );
array_shift( $split );
var_dump( $split );
输出:
array(5) {
[0]=>
string(19) "<b>Title1:</b><br/>"
[1]=>
string(26) "<b>Title2:</b> Value1<br/>"
[2]=>
string(26) "<b>Title3:</b> Value2<br/>"
[3]=>
string(32) "<b>Title4:</b> Value3<br/>Value4"
[4]=>
string(26) "<b>Title5:</b> Value5<br/>"
}
您的正则表达式已关闭,您需要:
<b>(.*?)<\/b>(.*?)(?=<b>|$)