正則表達式匹配 URL 模式
我試圖想出一個正則表達式模式,它將匹配這種格式的任何域:
example.com
但不是這個:
subdomain.example.com
目前它只需要覆蓋主要的頂級域名(com、net、org),但我希望它能夠處理其他域名(如 co.uk、com.br 等)以獲得靈活性。
到目前為止,我已經得到了這個,但它肯定需要一些工作:
^[^w].*\.[a-z]{3}.*$
正則表達式忍者可以幫助我嗎?
編輯:正則表達式將在 PHP 中使用,並且由於腳本的設置,字元串開頭永遠沒有要匹配的協議。我必須深入研究腳本以獲取有關為什麼這是真的更多詳細資訊,但我相信它只是從 PHP $_SERVER 變數中獲取主機名。
編輯2:也許這可以涵蓋任何內容,但不包括與 .xyz 或 .xyz.ab 或 .xyz.abc 匹配的時間段
^[^.]+(\.[^.]{3}|\.[^.]{2,3}\.[^.]{2,3}).*$
編輯 3:我有幾乎完成的模式:
updated below
(php 需要 / 和 / 在開頭和結尾)任何人都可以在實現中戳漏洞嗎?它似乎按預期工作。編輯 4:這是我目前所在的位置:
updated below
它幾乎與我想要的匹配,儘管它需要 / 在文件路徑的開頭,因此 example.com 不匹配,而 example.com/test 匹配。如果不匹配“www.example.com”中的“.exa”,我無法讓它匹配 example.com。編輯 5:好的,我們有一個贏家:
/^[^.]+((\.[^.\/]{1,3}\b){1,2}).*$/
匹配項:
example.com
example.co.uk
example.com/test.php?a=b
example.co.uk/test.php?a=b
123.com
1234.com
www.123.com(匹配所有 URL少於 4 個字元的域)
不匹配:
www.example.co.uk/test.php?a=b
test.example.com /test.php?a=b
test.example.co.uk/test.php?a=b
您使用什麼語言?
一般來說,聽起來您想要的東西與域的基本方面相匹配,排除了除 .tld 之外的其他時期的可能性。
http://[ ^.]+.(com|net|org)#i
如果你不想匹配協議,也許是這樣的。
$$ ^. $$+ . (com | net | org) #i 您處理多部分 TLD 的願望真的會搞砸,您需要維護一個手動列表,列出您想要匹配的所有 TLD。唯一的替代方法是進行 DNS 查找以確定列表類型。實際上沒有其他方法可以使用正則表達式從域中提取子域數據,因為按權利域實際上只是某些 TLD(頂級域)的子域。
**編輯:**為了匹配 TLD,假設它們的字元少於四個,你可以玩這樣的東西。你將不得不弄清楚比賽的開始和結束是什麼。你需要一個協議的存在嗎?這是在一段有人可以打字的段落中嗎?一段斷章取義的時期?如果您提供有關參數的更多詳細資訊,我們可能會提供更精確的解決方案。
[^.]+((\.[^.]{0,3})+)