正则表达式-重复组

时间:2020-02-18 16:38:37

标签: php regex

我有文字:

<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>(.*?)

2 个答案:

答案 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>|$)

https://regex101.com/r/dk67IK/1

相关问题