首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

PHP/JavaScript 正則表達式提取二級域名與鏈接文字完整實戰

     編輯:程式設計疑難解答

需求分析

從 HTML 字串中提取形如 news.qq.com 的二級域名鏈接,並同時獲取鏈接文字(如「新聞」),需處理域名後帶路徑的情況(如 ent.qq.com/movie)。

正則設計思路

  • 匹配 <a href="..."> 標籤結構。
  • 捕獲組 1:完整 URL(含協議、域名、路徑)。
  • 捕獲組 2:鏈接顯示文字。
  • 使用非貪婪匹配避免跨標籤捕獲。

JavaScript 實現範例

var html = '<a href="https://mil.qq.com/" target="_blank">軍事</a>...<a href="https://ent.qq.com/movie" target="_blank">電影</a>';
var regex = /<a\s+href="([^"]+)"[^>]*>([^<]+)<\/a>/gi;
var matches = [];
var match;
while ((match = regex.exec(html)) !== null) {
    matches.push({
        url: match[1],
        text: match[2]
    });
}
console.log(matches);
// 輸出: [{url: "https://mil.qq.com/", text: "軍事"}, {url: "https://ent.qq.com/movie", text: "電影"}, ...]

PHP 實現範例

$html = '...'; // 同樣的 HTML 字串
$pattern = '/<a\s+href="([^"]+)"[^>]*>([^<]+)<\/a>/i';
preg_match_all($pattern, $html, $matches, PREG_SET_ORDER);
foreach ($matches as $m) {
    echo "URL: {$m[1]}, Text: {$m[2]}\n";
}

進階:進一步解析二級域名

// 從 URL 中提取 hostname (JavaScript)
var url = new URL(match[1]); // 需完整 URL 含協議
var hostname = url.hostname; // 如 "news.qq.com"
var parts = hostname.split('.');
if (parts.length >= 3) {
    var secondLevel = parts[parts.length - 2] + '.' + parts[parts.length - 1]; // "qq.com"
    var subDomain = parts[0]; // "news"
}

注意事項

  • 正則解析 HTML 有局限性,複雜頁面建議使用 DOM 解析器(如 PHP 的 DOMDocument、JS 的 DOMParser)。
  • 跨域獲取 HTML 內容需注意同源策略或使用後端代理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved