Нахождение * двух * HTML-тегов с регулярными выражениями - PullRequest
0 голосов
/ 27 октября 2009

Мне нужно вытащить содержимое из двух тегов абзаца и разбить его тегом <br />. Вход выглядит так

<p>
Yay
</p>
<p>
StackOverFlow
</p>

Это должно быть похоже на

<p>
Yay <br />
StackOverflow
</p>

На данный момент у меня есть <p><?php preg_match('/<p>(.*)<\/p>/', $content, $match); echo($match[1])."..."; ?></p>, который тянет только первый тег абзаца:

<p>
Yay...
</p>

Кроме того, возможно ли установить ограничение на количество символов? Максимум 40 символов, например, из обоих абзацев, или мне придется использовать substr?

Спасибо!

Так оно и оказалось:

<?php $content = preg_replace('/<\/p>\s*<p>/', '<br/>', $content);  echo substr("$content",0,180)."..."; ?>

Ответы [ 3 ]

6 голосов
/ 27 октября 2009

Сделайте себе одолжение и используйте анализатор HTML (DOMDocument::loadHTML например). Это проще и менее хрупко.

4 голосов
/ 27 октября 2009

Я думаю, вы делаете это более сложным, чем нужно. Учитывая, что вы хотите свернуть:

<p>Yay</p><p>StackOverFlow</p>

в

<p>Yay<br />StackOverflow</p>

Тогда просто замените экземпляры </p><p> на <br>: preg_replace('/<\/p>\s*<p>/', '<br/>', $input).

<Ч />

В целом, однако, обратите внимание, что использование регулярных выражений для такого сложного анализа чревато опасностью. Более кратко:

«Некоторые люди, столкнувшись с проблемой, думают:« Я знаю, я буду использовать регулярные выражения ». Теперь у них две проблемы ". - Джейми Завински

0 голосов
/ 27 октября 2009

Мой совет, Regex может зайти так далеко. Смотрите один из моих постов здесь: Извлечение фрагмента текста из тела HTML (в .NET)

Он также имеет регулярное выражение для усечения строки.

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