使用Preg_Match进行正则表达式

时间:2012-01-16 09:22:19

标签: php regex

我正在使用PHP preg_match函数...

  1. 如何在标签之间获取文字。以下尝试无法获取值:preg_match("/^<title>(.*)<\/title>$/", $originalHTMLBlock, $textFound);

  2. 如何找到第一个出现的以下元素并获取(文本和标签束):

    <div id="post_message_">一堆文字和标签</div>

2 个答案:

答案 0 :(得分:3)

这开始变得无聊。正则表达式可能不是匹配HTML等语言的首选工具,在这个网站上有成千上万的类似问题来证明它。我不会链接到其他人总是链接到的答案 - 做一些搜索并亲自看看。

那就是说,你的第一个正则表达式假定<title>标签是整个输入。我怀疑情况并非如此。所以

preg_match("#<title>(.*?)</title>#", $originalHTMLBlock, $textFound);

有更多的工作机会。请注意,如果输入中有多个<title>标记,则延迟量词变得很重要。 <title>可能不太可能,<div>可能不会。

对于您的第二个问题,如果您在要查找的标签内没有任何嵌套的<div>标签,那么您只有正则表达式的工作机会。如果是这样的话,那么

preg_match("#<div id=\"post_message_\">(.*?)</div>#", $originalHTMLBlock, $textFound);

可能有用。

但总而言之,你最好使用HTML解析器。

答案 1 :(得分:0)

  1. 使用此:<title\b[^>]*>(.*?)</title>(您确定需要^$吗?)
  2. 如果您的<div\b[^>]*>(.*?)</div>文字中没有</div>标记,则可以使用相同的正则表达式Bunch of Texts and Tags。如果你这样做,也许你应该看看http://code.google.com/p/phpquery/
相关问题