2

我试图在 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];
}
4

2 回答 2

3

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

$tag_regex = '#<h1>(?:<span itemprop="itemreviewed">)?(.*?)(?:</span>)?</h1>#si';
于 2013-06-17T13:43:59.253 回答
1

/<h1>(?:<[^>]+>)?(.*?)(?:<[^>]+>)?<\/h1>/si通常可以用于删除 中的标签<h1/>,但您可能需要对其进行一些自定义。如果您特别想删除span上面列出的内容,它看起来像/<h1>(?:<span\s+itemprop=["']itemreviewed["'][^>]*>)?(.*?)(?:<[^>]+>)?<\/h1>/si. 查看RegularExpressions.info以获得很好的参考。

于 2013-06-17T13:50:27.163 回答