Проблема многострочного регулярного выражения в PHP - PullRequest
0 голосов
/ 08 августа 2010

Рассмотрим код ниже, почему он не работает?

<?php

$str = "
<h4>
   title
</h4>
";

$result = preg_match_all ('/<h4>([\d\D])<\/h4>/mi', $str, $matches);
var_dump($matches);

1 Ответ

2 голосов
/ 08 августа 2010

Вы, вероятно, имели в виду

$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, чтобы получить желаемое поведение.

Это, вероятно, будет включать переводы строк в вашем матче!

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