Php

正則表達式匹配 URL 模式

  • April 22, 2011

我試圖想出一個正則表達式模式,它將匹配這種格式的任何域:

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.com

www.example.co.uk

www.example.com/test.php?a=b

www.example.co.uk/test.php?a=b

test.example.com /test.php?a=b

test.example.co.uk/test.php?a=b

www.1234.com

您使用什麼語言?

一般來說,聽起來您想要的東西與域的基本方面相匹配,排除了除 .tld 之外的其他時期的可能性。

http://[ ^.]+.(com|net|org)#i

如果你不想匹配協議,也許是這樣的。

$$ ^. $$+ . (com | net | org) #i 您處理多​​部分 TLD 的願望真的會搞砸,您需要維護一個手動列表,列出您想要匹配的所有 TLD。唯一的替代方法是進行 DNS 查找以確定列表類型。實際上沒有其他方法可以使用正則表達式從域中提取子域數據,因為按權利域實際上只是某些 TLD(頂級域)的子域。

**編輯:**為了匹配 TLD,假設它們的字元少於四個,你可以玩這樣的東西。你將不得不弄清楚比賽的開始和結束是什麼。你需要一個協議的存在嗎?這是在一段有人可以打字的段落中嗎?一段斷章取義的時期?如果您提供有關參數的更多詳細資訊,我們可能會提供更精確的解決方案。

[^.]+((\.[^.]{0,3})+)

引用自:https://serverfault.com/questions/239499