2014-03-25 414 views
1

這裏是網址的正則表達式:正則表達式:網站網址的正則表達式轉換

(?<protocol>http|ftp)://(?<domain>[^/\r\n]+)(?<path>/[^\r\n]*)? 

我想知道怎麼能說是?就像每個字符/標誌的含義一樣。

我知道:

(?<protocol>http|ftp):// :: '協議' 的分組名稱

http|ftp - HTTP或FTP

://後,協議必須是這些字符

然後我會就如何解釋以下內容:

`(?<domain>[^/\r\n]+)(?<path>/[^\r\n]*)?` 

謝謝

+1

轉到[** Regex101 **](http://regex101.com/#PCRE)和'(? [^ \/\ r \ n]的+粘貼)(? \/[^ \ r \ n] *)?' – kei

+0

很好的資源!現在對我來說很清楚。萬分感謝! –

+0

這個問題似乎是脫離主題,因爲它只是要求解釋一個正則表達式 – brimble2010

回答

0

當您指定(?<text>(regex))您正在做的是爲捕獲組指定分組名稱。捕獲組可以拆分數據的匹配方式。

例如:(HTTP | FTP)\:只有一個捕獲組,但比賽(HTTP或FTP)和:字符。後者在捕獲組中未被指定。

捕獲組在許多情況下很有用,如bash或Python,您需要一組特定的數據。所以,如果我想只有HTTP或FTP,但我想,以確保它其次是「:」,我將指定我想捕獲組0

現在回到正則表達式。

單獨的正則表達式是(這將匹配http://google.com),沒有分組名稱:

(http|ftp)\:\/\/([^/\r\n]+)(\/[^\r\n]*) 

(http|ftp) ::匹配可以是 'http' 或 'FTP'。

\: ::匹配的 ':' 字符。

\/ ::匹配'/'字符。

([^/\r\n]+) ::匹配任何字符和一個或多個不在設置一致。意思是不是'/'的任何字符,返回字符或換行符。

([^\r\n]*) ::匹配任何字符,零個或多個匹配不在集合。往上看。

現在以下只是一個URL的最後兩部分。的URL是由protocol://domain/path

(?<domain>[^/\r\n]+)(?<path>/[^\r\n]*)?