结合两个正则表达式函数来去除html标签

时间:2013-06-17 13:35:11

标签: php regex

我试图在html页面中获取H1文本我使用正则表达式工作正常,直到我们开始在某些页面上使用微格式来简化,我使用了页面的标题(h1标签作为“正在审查的项目”)

问题是我之前使用的正则表达式停止工作,所以我写了另一个正则表达式,以防第一个返回空结果。我知道这非常有意义!如何将以下内容组合成一个简单的正则表达式? :

//Get the H1 title
function get_tag( $attr, $value, $xml )
{
   $attr = preg_quote($attr);
   $value = preg_quote($value);

   $tag_regex2 = '/<h1>(.*?)<\\/h1>/si';
   $tag_regex = '/<h1><span itemprop="itemreviewed">(.*?)<\\/span><\\/h1>/si';


   preg_match($tag_regex,
   $xml,
   $matches);

   if ($matches[1] == ""){
   preg_match($tag_regex2,
   $xml,
   $matches);
   };



   return $matches[1];
}

2 个答案:

答案 0 :(得分:3)

如果您愿意为了方便而牺牲稳健性(如果您使用正则表达式来解析HTML,则必须这样做)),您可以使用

$tag_regex = '#<h1>(?:<span itemprop="itemreviewed">)?(.*?)(?:</span>)?</h1>#si';

答案 1 :(得分:1)

/<h1>(?:<[^>]+>)?(.*?)(?:<[^>]+>)?<\/h1>/si一般用于移除<h1/>中的标记,但您可能希望稍微自定义它。如果您想要删除上面列出的span,则会看起来像/<h1>(?:<span\s+itemprop=["']itemreviewed["'][^>]*>)?(.*?)(?:<[^>]+>)?<\/h1>/si。查看RegularExpressions.info以获得很好的参考。