我想编写一个正则表达式,它提取字符串中两个标记<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
答案 0 :(得分:8)
您可以使用以下正则表达式:
>([^<]*)<
或,&gt; [^&lt;] *&lt;
然后消除不需要的字符,例如'&lt;' &安培; '&GT;'
答案 1 :(得分:5)
答案 2 :(得分:3)
在你的情况下,你可以使用正则表达式中的第二个反向引用,它会保存你感兴趣的文本。
由于您在代码中提到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文档,但我认为这可能是其中一种例外情况,因为标题标记只应存在于页面上一次。
答案 3 :(得分:2)
我用它作为Regex的替换函数:(&lt;。+?&gt;)