Регулярное выражение, заканчивающийся тегом в другой строке - PullRequest
0 голосов
/ 05 мая 2018

Я просто не могу заставить regex работать, когда тег start и тег ending находятся в разных строках.

Начальный тег должен быть <p class="psku"> и

окончание </span></p>

<p class="psku">Number: rrfaee220-1</p>
<p class="availability order-only">Delivery: <span> 1-2 months</span></p>

регулярное выражение должно быть в пределах этого:

preg_match_all("/<p class=\"psku\">SOMETHINGREGEX</span></p>/", $string, $info);

1 Ответ

0 голосов
/ 05 мая 2018

Прежде всего, вы используете / в качестве разделителя в своем регулярном выражении. Это нормально, но вы должны избегать косых черт внутри регулярного выражения, как это:

/<p class=\"psku\">SOMETHINGREGEX<\/span><\/p>/

Если вы похожи на меня и думаете, что это выглядит беспорядочно, вы также можете выбрать другой символ в качестве разделителя:

@<p class=\"psku\">SOMETHINGREGEX</span></p>@

Кроме того, что внутри вашего SOMETHINGREGEX? Я подозреваю, что он содержит точку (.). Чтобы точка соответствовала символам новой строки и растягивалась на несколько строк, необходимо добавить модификатор s:

@<p class=\"psku\">SOMETHINGREGEX</span></p>@s

Однако, как уже упоминалось @konrados, использование DOMDocument было бы лучшим выбором здесь. Использование регулярных выражений для разбора HTML очень ненадежно, так как вам приходится учитывать множество вариантов форматирования: теги, написанные заглавными буквами, пробелы в местах, которые вы не ожидаете, и т. Д. Однако, если вы уверены, что весь ваш ввод отформатированный таким же образом, регулярное выражение должно сделать свое дело.

...