php regex在href标签内获取字符串

时间:2010-10-22 22:09:08

标签: php regex html-parsing

我需要一个正则表达式,它会在href标签内部和引号内部给我字符串。

例如,我需要在以下内容中提取theurltoget.com:

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

此外,我只想要基本网址部分。即来自http://www.mydomain.com/page.html我只想要http://www.mydomain.com/

9 个答案:

答案 0 :(得分:16)

不要使用正则表达式。你可以使用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);

答案 1 :(得分:11)

$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

答案 2 :(得分:7)

这个表达式将处理3个选项:

  1. 没有引号
  2. 双引号
  3. 单引号
  4.   

    '/ HREF = [“\']([^? ”\“&GT;] +)[” \'] /

答案 3 :(得分:6)

如果您只是寻找基本网址(@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之间寻找整个网址时,你应该使用另一个正则表达式,例如@ 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

答案 4 :(得分:5)

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

  

让我们从最简单的情况开始 - 格式良好的链接,没有额外的属性:

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

答案 5 :(得分:4)

对于所有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;

答案 6 :(得分:1)

这将处理URL周围没有引号的情况。

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

但严肃地说,do not parse HTML with regex。使用DOM或适当的解析库。

答案 7 :(得分:0)

/href="(https?://[^/]*)/

我认为你应该能够处理其余的事情。

答案 8 :(得分:0)

因为积极和消极的外观很酷

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

它只匹配你想要的,没有引号

  

阵列(       [0] =&gt; theurltoget.com)