PHP regex help - обратный поиск? - PullRequest
0 голосов
/ 10 апреля 2010

Итак, у меня есть регулярное выражение, которое ищет теги HTML и слегка их модифицирует. Он отлично работает, но мне нужно сделать что-то особенное с последним найденным тегом HTML. Не уверен, что лучший способ сделать это. Я думаю, что-то в обратном порядке, но не нашел способ сделать это. Вот мой код:

$html = '<div id="test"><p style="hello_world">This is a test.</p></div>';

$pattern = array('/<([A-Z][A-Z0-9]*)(\b[^>]*)>/i');
$replace = array('<tag>');
$html = preg_replace($pattern,$replace,$html);

// Outputs: <tag><tag>This is a test</p></div>

Я бы хотел заменить последнее вхождение <tag> чем-то особенным, скажем, например, <end_tag>.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 30 сентября 2010

Я полагаю, что этот метод работает так же, как @ meager, но более лаконичен:

<?php
$html = '<div id="test"><p style="hello_world">This is a test.</p></div>';
$readmore = ' <a href="/foo/bar">Read More&hellip;</a>';

// Outputs:
// '<div id="test"><p style="hello_world">This is a test.</p> <a href="/foo/bar">Read More&hellip;</a></div>'
echo preg_replace('#</\w>\s*$#', $readmore .'$1', $html);
?>
0 голосов
/ 10 апреля 2010

Если я правильно понял, вы хотите найти последний закрывающий тег в документе.

Вы можете найти последнее вхождение </*>, у которого больше нет символов «<>» после него. Это будет последний тег, при условии, что все оставшиеся угловые скобки закодированы как &lt; и &gt;:

<?php
$html = '<div id="test"><p style="hello_world">This is a test.</p></div>';

// Outputs:
// '<div id="test"><p style="hello_world">This is a test.</p></tag>'
echo preg_replace('/<\/[A-Z][A-Z0-9]*>([^<>]*)$/i', '</tag>$1', $html);

Это заменит окончательный </div> на </tag>, сохранив любой контент, следующий за последним закрывающим тегом.

Я не знаю, почему вы хотите сделать это только с закрывающим тегом, так как если вы его измените, вам также придется изменить соответствующий открывающий тег. Кроме того, при этом не будет найден последний самозакрывающийся тег, например <img /> или <br />.

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