3

我想编写一个正则表达式来提取<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的链接

4

4 回答 4

9

您可以使用以下正则表达式:

>([^<]*)<

或者,>[^<]*<

然后消除不需要的字符,如 '<' & '>'

于 2013-02-22T23:04:00.817 回答
6

最好的方法是使用断言,对于您的情况,正则表达式将是:

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

有关更多详细信息,请查看此处

于 2014-03-22T15:09:03.807 回答
4

在您的情况下,您可以只使用正则表达式中的第二个反向引用,它将保存您感兴趣的文本。

既然你preg_match在标签中提到,我假设你想要这个用于 PHP。

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

请注意,这实际上是我的模式中的第一个反向引用,因为我省略了标签本身周围的括号,这是不需要的。

通常,您不应该使用正则表达式来解析 HTML 文档,但我认为这可能是其中一种例外情况,情况还不错,因为标题标签应该只在页面上存在一次。

于 2013-02-22T22:09:24.687 回答
3

我用它作为正则表达式的替换函数: (<.+?>)

于 2015-11-30T21:05:08.863 回答