Я хочу написать регулярное выражение, которое извлекает содержимое, находящееся между двумя тегами <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: (<. +?>)