Регулярное выражение - повтор групп - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть текст:

<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 голосов
/ 18 февраля 2020

Вы можете использовать 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

0 голосов
/ 18 февраля 2020

Ресурс, подобный этому, может быть очень полезен для устранения неполадок регулярного выражения: https://regex101.com/

Похоже, вам не хватает escape-символа в <b>(.*?)</b>(.*?)

<b>(.*?)<\/b>(.*?) Если вы не хотите, чтобы это текущее регулярное выражение выдало ошибку, и вы приблизитесь к результату, вам нужно будет поработать с ним немного больше, чтобы получить точные результаты, которые вы хотите.

<b>(.*?)<\/b>(.*?)<br\/> следует Я думаю, что будьте немного ближе, поскольку вы хотите включить теги разрыва.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...