また、hrefタグ内および引用符内の文字列を取得する正規表現が必要です。
たとえば、urltoget.comを次のように抽出する必要があります。
<a href="theurltoget.com">URL</a>
さらに、ベースURL部分のみが必要です。つまりhttp://www.mydomain.com/page.html
からhttp://www.mydomain.com/
のみが欲しい
これには正規表現を使用しないでください。 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);
$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
この式は3つのオプションを処理します。
'/ href = ["\']?([^"\'>] +)["\']?/ '
ベース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
http://www.the-art-of-web.com/php/parse-links/
最も単純なケースから始めましょう-追加の属性のない適切にフォーマットされたリンク:
/<a href=\"([^\"]*)\">(.*)<\/a>/iU
すべての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;
/href="(https?://[^/]*)/
あとはお任せください。
これは、URLの前後に引用符がない場合を処理します。
/<a [^>]*href="?([^">]+)"?>/
しかし真剣に、 正規表現でHTMLを解析しない 。 DOMまたは適切な解析ライブラリを使用します。
ポジティブとネガティブ後読みはクールだから
/(?<=href=\").+(?=\")/
引用符なしで、必要なものだけに一致します
配列([0] => theurltoget.com)