我正在寻找 preg_match_all 模式来查找页面上没有斜杠的所有 URL。
例如:如果我有
a href="/testing/abc/">以斜线结尾
a href="/testing/test/mnl">没有结束斜线
结果将是#2
谢谢。
我正在寻找 preg_match_all 模式来查找页面上没有斜杠的所有 URL。
例如:如果我有
a href="/testing/abc/">以斜线结尾
a href="/testing/test/mnl">没有结束斜线
结果将是#2
谢谢。
最好使用 DOM 解析器提取所有 href 链接,并查看 URL 是否以斜杠结尾。不需要正则表达式。
对于提供的示例的正则表达式解决方案,您可以使用此正则表达式:
/href=(['"])[^\s]+(?<!\/)\1/
href= -> match text href=
(['"]) -> match single or double quote and create a group #1 with this match
[^\s]+ -> match 1 or more character until a space is found
(?<!\/) -> (negative lookbehind) only match if is not preceded by /
\1 -> match closing single or double quote (group #1)
确实,使用 DOM 解析器[为什么?] . 这是一个例子:
// let's define some HTML
$html = <<<'HTML'
<html>
<head>
</head>
<body>
<a href="/testing/abc/">end with slash</a>
<a href="/testing/test/mnl">no ending slash</a>
</body>
</html>
HTML;
// create a DOMDocument instance (a DOM parser)
$dom = new DOMDocument();
// load the HTML
$dom->loadHTML( $html );
// create a DOMXPath instance, to query the DOM
$xpath = new DOMXPath( $dom );
// find all nodes containing an href attribute, and return the attribute node
$linkNodes = $xpath->query( '//*[@href]/@href' );
// initialize a result array
$result = array();
// iterate all found attribute nodes
foreach( $linkNodes as $linkNode )
{
// does its value not end with a forward slash?
if( substr( $linkNode->value, -1 ) !== '/' )
{
// add the attribute value to the result array
$result[] = $linkNode->value;
}
}
// let's look at the result
var_dump( $result );