繁体   English   中英

正则表达式模式的简单问题

[英]Simple problem with regex pattern

请帮我从这个标签中获取链接和文字。 <h3 class="post-title entry-title"> ,因为我想要来自该特定标签的链接。

<h3 class="post-title entry-title">
<a href="http://mymplogk.blogspot.com/2011/03/h_25.html">Text</a>
</h3>

到目前为止我的工作是

<?php

$string = file_get_contents('http://www.domain.com');

$regex_pattern = "";

unset($matches);
preg_match_all($regex_pattern, $string, $matches);


foreach ($matches[0] as $paragraph) {
echo $paragraph;
echo "<br>";
}
?> 

先感谢您

不要使用正则表达式来解析HTML。 这是个坏主意。 使用HTML / XML解析器。 由于您使用的是PHP,因此可以尝试使用PHP TidyDOMDocument 它会让你的生活轻松。

我建议你使用DOMDocument和XPath从页面中提取url而不是使用regexp。

本教程为您提供了一些如何使用xpath和dom的初学者。 http://www.merchantos.com/blog/makebeta/php/scraping-links-with-php#php_dom

编辑:如果你在firefox中使用firebug-addon,你可以在页面上检查你的元素,并复制它的xpath。

正则表达式:

(?<=href=").+(?=")

应匹配href标签之间的任何内容

您可以在RegexStorm中测试它

按照你的例子,这个正则表达式将找到“http://mymplogk.blogspot.com/2011/03/h_25.html”和“文本”:

$regex_pattern = '/<h3[^>]+class\s*=\s*[\'"]post-title entry-title[\'"][^>]*>.*?<a[^>]+href\s*=\s*"([^"]+)"[^>]*>([^<]*)</s';

这匹配h3标记周围的单引号或双引号,并允许h3标记中的其他属性以及属性和值之间的可选空格。 它也在$ string中匹配多次,例如

$string = '<h3 class="post-title entry-title">
<a href="http://mymplogk.blogspot.com/2011/03/h_25.html">Text</a>
</h3>
<p>doot</p>
<h3 class=\'post-title entry-title\'>
<a href="http://www.google.com/">More Text</a>
</h3>';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM