Я просто не могу заставить 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);
По какой причине вы не используете DOMDocument - php.net/manual/en/class.domdocument.php? - стоит прочитать: stackoverflow.com/questions/1732348/…






Прежде всего, вы используете / в качестве разделителей в регулярном выражении. Это нормально, но вам нужно избегать косых черт внутри регулярного выражения следующим образом:
/<p class=\"psku\">SOMETHINGREGEX</span></p>/
Если вы похожи на меня и думаете, что это выглядит беспорядочно, вы также можете использовать другой символ в качестве разделителя:
@<p class=\"psku\">SOMETHINGREGEX</span></p>@
Кроме того, что внутри вашего SOMETHINGREGEX? Я подозреваю, что он содержит точку (.). Чтобы точка соответствовала символам новой строки и растягивалась на несколько строк, вам необходимо добавить модификатор s:
@<p class=\"psku\">SOMETHINGREGEX</span></p>@s
Однако, как упоминал @konrados, использование DOMDocument было бы здесь лучшим выбором. Использование регулярного выражения для синтаксического анализа HTML очень ненадежно, так как вы должны учитывать множество вариантов форматирования: теги, написанные заглавными буквами, пробелы в местах, которых вы не ожидаете, и т.д. отформатированный таким же образом, регулярное выражение должно помочь.
Возможный дубликат RegEx соответствует открытым тегам, кроме автономных тегов XHTML.