我试图在html代码中搜索它,如何修复它?
<a href="http://www.filman.cz/ex-machina-2015-3/" rel="bookmark">
(仅限该链接)
我使用过这个preg_match_all,但似乎编写得不好
preg_match_all("/<a href=\"([^\"]*)\"/", $links_area, $matches );
我不知道为什么,但它不起作用。我认为某个地方会被严重打算&#34; /&#34;或&#34; *&#34;但我不确切地知道。 顺便说一句,为什么&#34;质量标准&#34;在这个网站上这么难?我有问题在这里发布一切。
答案 0 :(得分:4)
我会考虑将 DOM 和 XPath 用于此任务,下面是一个示例:
$doc = DOMDocument::loadHTML('
<a href="http://www.filman.cz/ex-machina-2015-3/" rel="bookmark">
<a href="http://www.facebook.com">Visit Us On Facebook</a>
<a href="https://www.paypal.com">Pay Now</a>
<a href="http://www.filman.cz/ex-machina-2015-5/" rel="bookmark">
');
$xp = new DOMXPath($doc);
foreach ($xp->query('//a[@rel="bookmark"]') as $link) {
$matches[] = $link->getAttribute('href');
}
print_r($matches);
输出
Array
(
[0] => http://www.filman.cz/ex-machina-2015-3/
[1] => http://www.filman.cz/ex-machina-2015-5/
)
注意:我不确定您对输出的期望,但这有助于您避免使用正则表达式。
如果您只是尝试匹配包含“filman.cz”的@href值,则可以使用contains()
OR substring()
和XPath查询。
答案 1 :(得分:0)
您可以使用此正则表达式。它匹配以Platform.position
开头的所有元素,并选择<a
属性的内部。
<a(?:[^>])+href="(https?\:\/\/[^\"]+)\"(?:[^>])*>
编辑:我完全忘了Xpath ..它专门为这类工作而设计,所以使用hwnd的答案,这是解析HTML文档的最佳选择。
答案 2 :(得分:0)
我认为它可能效率较低但更准确
/<a\s+href="(http(?:s)?:\/\/[\w\.\/-]+)".*?>/g
说明:
<a\s+
- &gt;标记'a'+空格
href=\"
- &gt; href til引用
(http(?:s)?
- &gt; http或https
: \/\/
- &gt;文字“:”和“//”
[\w\.\/-]+)
- &gt;网址字符
".*?>
- &gt;字面引号和其他任何内容,直到“&gt;”
PHP代码:
$re = "/<a\\s+href=\"(http(?:s)?:\\/\\/[\\w\\.\\/-]+)\".*?>/";
$str = "<a href=\"http://www.filman.cz/ex-machina-2015-3/\" rel=\"bookmark\">";
preg_match_all($re, $str, $matches);