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

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

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

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

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

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

Вы можете использовать следующее Regex:

 >([^<]*)< 

или,> [^ <] * <

Затем устраните нежелательные символы, такие как '<' & '>'

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

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

для более подробной информации смотрите здесь

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

Поскольку вы 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-документов, но я думаю, что это может быть один из тех случаев исключения, где это не так уж плохо, поскольку тег title должен существовать только один раз на странице.

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