PHP Regex точка соответствует новой строке альтернативы - PullRequest
1 голос
/ 24 марта 2011

Я придумаю регулярное выражение для захвата всего текста между двумя тегами HTML.Вот что у меня есть:

<TAG[^>]*>(.*?)</TAG>

На практике это должно работать идеально.Но выполнение его в PHP preg_replace с параметрами: / ims приводит к совпадению всей строки.

Если я удаляю тег / s, он работает отлично, но между тегами есть новые строки.Есть ли лучший способ приблизиться к этому?

Ответы [ 2 ]

3 голосов
/ 24 марта 2011

Конечно, есть лучший способ. Не разбирайте HTML с регулярным выражением .

DOMDocument должно быть в состоянии приспособиться к вам лучше:

$dom = new DOMDocument();
$dom->loadHTMLFile('filename.html');

$tags = $dom->getElementsByTagName('tag');

echo $tags[0]->textContent; // Contents of `tag`

Возможно, вам придется настроитькод выше (не был проверен).

1 голос
/ 12 апреля 2011

Я не рекомендую использовать регулярные выражения для сопоставления в полном HTML, но вы можете использовать флаг "dottal": / REGEXP / s

Пример:

$str = "<tag>
fvox
</tag>";

preg_match_all('/<TAG[^>]*>(.*?)</TAG>/is', $str, $r);
print_r($r); //dump
...