web-dev-qa-db-ja.com

PHPの正規表現は、hrefタグ内の文字列を取得します

また、hrefタグ内および引用符内の文字列を取得する正規表現が必要です。

たとえば、urltoget.comを次のように抽出する必要があります。

<a href="theurltoget.com">URL</a>

さらに、ベースURL部分のみが必要です。つまりhttp://www.mydomain.com/page.htmlからhttp://www.mydomain.com/のみが欲しい

14
David

これには正規表現を使用しないでください。 xpathと組み込みのphp関数を使用して、必要なものを取得できます。

    $xml = simplexml_load_string($myHtml);
    $list = $xml->xpath("//@href");

    $preparedUrls = array();
    foreach($list as $item) {
        $item = parse_url($item);
        $preparedUrls[] = $item['scheme'] . '://' .  $item['Host'] . '/';
    }
    print_r($preparedUrls);
17
Drew Hunter
$html = '<a href="http://www.mydomain.com/page.html">URL</a>';

$url = preg_match('/<a href="(.+)">/', $html, $match);

$info = parse_url($match[1]);

echo $info['scheme'].'://'.$info['Host']; // http://www.mydomain.com
12
Alec

この式は3つのオプションを処理します。

  1. 引用符なし
  2. 二重引用符
  3. 一重引用符

'/ href = ["\']?([^"\'>] +)["\']?/ '

6
ishubin

ベースURLの部分(@Davidによる質問の2番目の部分)のみを探している場合は、@ Alecによる回答を使用してください。

$html = '<a href="http://www.mydomain.com/page.html" class="myclass" rel="myrel">URL</a>';
$url = preg_match('/<a href="(.+)">/', $html, $match);
$info = parse_url($match[1]);

これはあなたに与えるでしょう:

$info
Array
(
    [scheme] => http
    [Host] => www.mydomain.com
    [path] => /page.html" class="myclass" rel="myrel
)

したがって、$href = $info["scheme"] . "://" . $info["Host"]を使用できます。

// http://www.mydomain.com  

あなたがhrefの間に全体のurlを探しているとき、あなたは別の正規表現、例えば@ user2520237によって提供された正規表現を使用しているべきです。

$html = '<a href="http://www.mydomain.com/page.html" class="myclass" rel="myrel">URL</a>';
$url = preg_match('/href=["\']?([^"\'>]+)["\']?/', $html, $match);
$info = parse_url($match[1]);

これはあなたに与えるでしょう:

$info
Array
(
    [scheme] => http
    [Host] => www.mydomain.com
    [path] => /page.html
)

これで$href = $info["scheme"] . "://" . $info["Host"] . $info["path"];を使用できます。

// http://www.mydomain.com/page.html
5
Linkmichiel

http://www.the-art-of-web.com/php/parse-links/

最も単純なケースから始めましょう-追加の属性のない適切にフォーマットされたリンク:

/<a href=\"([^\"]*)\">(.*)<\/a>/iU
4
drudge

すべてのhref値の置換:

function replaceHref($html, $replaceStr)
{
    $match = array();
    $url   = preg_match_all('/<a [^>]*href="(.+)"/', $html, $match);

    if(count($match))
    {
        for($j=0; $j<count($match); $j++)
        {
            $html = str_replace($match[1][$j], $replaceStr.urlencode($match[1][$j]), $html);
        }
    }
    return $html;
}
$replaceStr  = "http://affilate.domain.com?cam=1&url=";
$replaceHtml = replaceHref($html, $replaceStr);

echo $replaceHtml;
3
Basani
/href="(https?://[^/]*)/

あとはお任せください。

0
Adam Byrtek

これは、URLの前後に引用符がない場合を処理します。

/<a [^>]*href="?([^">]+)"?>/

しかし真剣に、 正規表現でHTMLを解析しない 。 DOMまたは適切な解析ライブラリを使用します。

0
kijin

ポジティブとネガティブ後読みはクールだから

/(?<=href=\").+(?=\")/

引用符なしで、必要なものだけに一致します

配列([0] => theurltoget.com)

0