Вам не хватает флага /ims
в конце вашего регулярного выражения.В противном случае .
не будет соответствовать разрывам строк (как в первом абзаце).На самом деле /s
будет достаточно, но я всегда использую все три для простоты.
Кроме того, preg_match работает во многих простых случаях.Но если вы пытаетесь выполнить более сложное извлечение, попробуйте заменить phpQuery или QueryPath , которые позволяют:
foreach (qp($html)->find("p") as $p) { print $p->text(); }