Вы, вероятно, имели в виду
$str = "
<h4>
title
</h4>
";
$result = preg_match_all ('/<h4>(.+?)<\/h4>/si', $str, $matches);
var_dump($matches);
Регулярное выражение, которое вы применили, '/<h4>([\d\D])<\/h4>/mi'
, означает «Соответствует открывающему h4, одному символу , который является либо цифрой или не цифрой, и закрывающему h4». Но у вас достаточно символов для сопоставления, поэтому вам нужно указать квантификатор («больше одного», +
). Обновление: вам нужен не жадный квантификатор, +?
, если у вас более одного h4 (очень вероятно!) И класс [\d\D]
можно уменьшить до "любого символа", .
, Еще один момент: вам нужно использовать /s
вместо /m
, чтобы получить желаемое поведение.
Это, вероятно, будет включать переводы строк в вашем матче!