如何使用 PHP 从内容中查找 URL?
-
11-09-2019 - |
题
需要一个简单的 preg_match,它将在内容中查找“c.aspx”(不带引号),如果找到,它将返回整个 url。举个例子
$content = '<div>[4]<a href="/m/c.aspx?mt=01_9310ba801f1255e02e411d8a7ed53ef95235165ee4fb0226f9644d439c11039f%7c8acc31aea5ad3998&n=783622212">New message</a><br/>';
现在它应该 preg_match "c.aspx" from $content 并将输出如下
"/m/c.aspx?mt=01_9310ba801f1255e02e411d8a7ed53ef95235165ee4fb0226f9644d439c11039f%7c8acc31aea5ad3998&n=783622212"
$content 应该有除“c.aspx”之外的更多链接。我不想要他们。我只想要所有包含“c.aspx”的网址。
请让我知道我该怎么做。
解决方案
您使用DOM来解析HTML,而不是正则表达式。可以使用正则表达式来解析虽然属性值。
编辑:更新例如使得它检查c.aspx
$content = '<div>[4]<a href="/m/c.aspx?mt=01_9310ba801f1255e02e411d8a7ed53ef95235165ee4fb0226f9644d439c11039f%7c8acc31aea5ad3998&n=783622212">New message</a>
<a href="#bar">foo</a>
<br/>';
$dom = new DOMDocument();
$dom->loadHTML($content);
$anchors = $dom->getElementsByTagName('a');
if ( count($anchors->length) > 0 ) {
foreach ( $anchors as $anchor ) {
if ( $anchor->hasAttribute('href') ) {
$link = $anchor->getAttribute('href');
if ( strpos( $link, 'c.aspx') ) {
echo $link;
}
}
}
}
其他提示
如果您想查找其中包含 c.aspx 的任何带引号的字符串:
/"[^"]*c\.aspx[^"]*"|'[^']*c\.aspx[^']*'/
但实际上,为了解析大多数 HTML,你最好使用某种 DOM 解析器,这样你就可以确定你匹配的确实是一个 href。
不隶属于 StackOverflow