Мне нужно регулярное выражение, которое даст мне строку внутри тега href и внутри кавычек.
Например, мне нужно извлечь theurltoget.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 = [ "\']? ([^ "\ ">] +) [" \ '] /?'
http://www.the-art-of-web.com/php/parse-links/
Начнем с простейшего случая – хорошо отформатированной ссылки без дополнительных атрибутов:
 /<a href=\"([^\"]*)\">(.*)<\/a>/iU 
Используйте ответ @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"] $href = $info["scheme"] . "://" . $info["host"]  $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"]; $href = $info["scheme"] . "://" . $info["host"] . $info["path"];  Что дает вам: 
 // http://www.mydomain.com/page.html 
Для всех значений замены 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; 
Это будет обрабатывать случай, когда котировки вокруг URL-адреса отсутствуют.
 /<a [^>]*href="?([^">]+)"?>/ 
Но серьезно, не разбирайте HTML с регулярным выражением . Используйте DOM или соответствующую библиотеку разбора.
 /href="(https?://[^/]*)/ 
Думаю, вы сможете справиться с остальными.
Потому что положительный и отрицательный Lookbehind классные
 /(?<=href=\").+(?=\")/ 
Он будет соответствовать только тому, что вы хотите, без кавычек
Массив ([0] => theurltoget.com)