Php regex для получения строки внутри тега href
Мне нужно регулярное выражение, которое даст мне строку внутри тега href и внутри кавычек.
Например, мне нужно извлечь theurltoget.com в следующем:
<a href="theurltoget.com">URL</a>
Кроме того, мне нужна только часть базового url. То есть from http://www.mydomain.com/page.html
Мне нужно только http://www.mydomain.com/
Ответы
Ответ 1
Не используйте для этого регулярное выражение. Вы можете использовать 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);
Ответ 2
$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
это выражение будет обрабатывать 3 варианта:
- нет кавычек
- двойные кавычки
- одинарные кавычки
'/href= [ "\']? ([^" \ " > ] +) [" \"]/?
Ответ 4
http://www.the-art-of-web.com/php/parse-links/
Начнем с простейшего случая - хорошо отформатированной ссылки без дополнительных атрибутов:
/<a href=\"([^\"]*)\">(.*)<\/a>/iU
Ответ 5
Используйте ответ @Alec, если вы ищете только базовую часть url (вторая часть вопроса от @David)!
$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
Когда вы ищете весь URL между 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
Ответ 6
Для всех значений замены 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;
Ответ 7
Это будет обрабатывать случай, когда в URL нет кавычек.
/<a [^>]*href="?([^">]+)"?>/
Но серьезно, не анализировать HTML с регулярным выражением. Используйте DOM или соответствующую библиотеку разбора.
Ответ 8
/href="(https?://[^/]*)/
Я думаю, вы сможете справиться с остальными.
Ответ 9
Потому что положительный и отрицательный Lookbehind классные
/(?<=href=\").+(?=\")/
Он будет соответствовать только тому, что вы хотите, без кавычек
Массив ( [0] = > theurltoget.com)