1

今日の初めに、html のすべてのリンクの hrefs を return fo some function に置き換えるための正規表現ソリューションについて質問しました..

その後、DomDocument を使用して回避できるように見えたので削除しましたが、できません...

私のhtmlには間違ったhtmlシンテックス、html5コードなどがたくさんあるので、loadHTMLもloadXMLも機能していません..

だれかが、href を検索し、すべての関数を呼び出して置換するための正規表現を使用したソリューションを提供できるかどうかを確認してください。同様の質問をすべて検索しましたが、すべて DomDocumenet の回答があり、使用できません..

古い類似の質問: A 要素の href 属性を取得する

ページ内のすべての href を検索し、前のリンクを維持するリンクに置き換えます - PHP

しかし、正規表現ソリューションが必要です

4

2 に答える 2

1

このコードを試してください:

// $text - your text
// $1 - preg variable for 1st "(.*)" match
// $2 - preg variable for 2nd "(.*)" match
preg_replace('/<a(.*)href="([^"]*)"(.*)>/','<a $1 href="http://new.href" $3>',$text);

ここに実際の例を貼り付けます: http://codepad.org/KORtcb9q

于 2012-09-06T14:11:21.193 に答える
1

私はそれを作成しました..主な問題は、通常、hrefの前、hrefの後、スペース、間違ったURL指定、一重引用符または二重引用符で囲まれたhref URLなど、他の属性があることを人々が恐れていることです..大きな利点は、使用方法を学んだことです.彼ら..

$callback = function ($match) use($params){
        $data = MyClass::updateUrl($match[2], $params);
        $return_data = 'href='.$match[1].$data.$match[1];
        return $return_data;
    };
    $reg = "#href\s*=\s*(\"|')?([^\"'>]+)(\"|')#i";
    return preg_replace_callback($reg, $callback, $html);
于 2012-09-06T15:46:35.070 に答える