1

末尾のスラッシュがないページ上のすべての URL を検索する preg_match_all パターンを探しています。

例:私が持っている場合

  1. a href="/testing/abc/">スラッシュで終わる

  2. a href="/testing/test/mnl">末尾のスラッシュなし

結果は#2になります

ありがとう。

4

2 に答える 2

1

DOM パーサーを使用してすべての href リンクを抽出し、URL がスラッシュで終わっているかどうかを確認してください。そのために正規表現は必要ありません。

提供された例の正規表現ソリューションでは、次の正規表現を使用できます。

/href=(['"])[^\s]+(?<!\/)\1/

ライブデモ: http://www.rubular.com/r/f2XJ6rF5Fb

説明:

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)
于 2013-03-14T16:39:37.387 に答える
0

実際、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 );
于 2013-03-14T16:50:42.780 に答える