Регулярное выражение, которое извлекает текст между тегами, но не сами теги

Я хочу написать регулярное выражение, которое извлекает содержимое между двумя тегами <title> в строке, но не тегами. IE у меня есть следующее

<title>My work</title>
<p>This is my work.</p> <p>Learning regex.</p>

Регулярное выражение

(<title>)(.*?)(<\/title>)

извлекает <title>My work</title>, но я хочу извлечь только My work. Как я могу это сделать? Это ссылка на пример http://regex101.com/r/mD8fB0.


person Nicolaesse    schedule 22.02.2013    source источник


Ответы (4)


Вы можете использовать это следующее регулярное выражение:

>([^<]*)<

or, >[^<]*<

Затем удалите нежелательные символы, такие как «‹» и «>».

person shasan    schedule 22.02.2013
comment
Вы можете объяснить значение [^<] ? - person Amit Choukroun; 09.07.2015
comment
Это не работает с <charlie><bob>Alice</bob></charlie>, то есть с текстом внутри вложенных тегов. есть идеи? - person PeterX; 12.02.2016

лучший способ - использовать утверждения, для вашего случая регулярное выражение будет:

(?<=\<title\>).*?(?=\<\/title\>)

подробнее см. здесь

person Ammar    schedule 22.03.2014
comment
это не работает, если в содержимом присутствует символ новой строки! - person ZOXEXIVO; 14.10.2014

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

Поскольку вы упоминаете preg_match в своих тегах, я предполагаю, что вы хотите это для PHP.

$matches = array();
$pattern = '#<title>(.*?)</title>#'; // note I changed the pattern a bit
preg_match($pattern, $string, $matches);
$title = $matches[1];

Обратите внимание, что на самом деле это первая обратная ссылка в моих шаблонах, поскольку я опустил круглые скобки вокруг самих тегов, которые были не нужны.

Как правило, вам не следует использовать Regex для анализа HTML-документов, но я думаю, что это может быть одним из тех исключений, когда это не так уж плохо, поскольку тег заголовка должен существовать только один раз на странице.

person Mike Brant    schedule 22.02.2013

Я использовал это как функцию замены регулярного выражения: (‹.+?>)

person andrewster    schedule 30.11.2015
comment
УМНЫЙ ответ! Мне нравится, как ты смотришь на вещи - person Eric Novins; 15.09.2016