2012-04-12 101 views
2

這是一個來自mediawiki,一個開源wiki解決方案的正則表達式。這個正則表達式匹配什麼?來自mediawiki源代碼的php正則表達式

/\[((http\:\/\/|https\:\/\/|ftp\:\/\/|irc\:\/\/|ircs\:\/\/|gopher\:\/\/|telnet\:\/\/|nntp\:\/\/|worldwind\:\/\/|mailto\:|news\:|svn\:\/\/|git\:\/\/|mms\:\/\/|\/\/)[^][<>"\x00-\x20\x7F\p{Zs}]+)\p{Zs}*([^\]\x00-\x08\x0a-\x1F]*?)\]/Su 

對我來說,它似乎是匹配uri的,但我不能讓它匹配任何東西。即時通訊無法理解正則表達式的最後部分,即。

[^][<>"\x00-\x20\x7F\p{Zs}]+)\p{Zs}*([^\]\x00-\x08\x0a-\x1F]*?)\] 

這是幹什麼的?

任何幫助解碼這是非常感謝。

回答

4

此正則表達式匹配external links

[http://www.stackoverflow.com] 
[https://www.stackoverflow.com StackOverflow] 
[ftp://ftp.mozilla.org Mozilla] 
+0

謝謝你,我只是想出了自己藏漢.. – netbrain 2012-04-12 08:00:14

3

[^][<>"\x00-\x20\x7F\p{Zs}]
是一個否定的字符類的任何字符,但匹配:][<>",在ASCII字符範圍\x00-\x20,ASCII字符\x7F和空白(p{Zs}Unicode Character Property是匹配任何類型的空格字符)

\p{Zs}*匹配任何類型的空格字符0或更多次

​​
是一個否定的字符類匹配任何字符,但],ASCII字符範圍\x00-\x08\x0a-\x1F

+0

你的第一句話是錯誤的。您必須將[[^] [<>「\ x00- \ x20 \ x7F \ p {Zs}]'分隔爲'[^]'和'[<>」\ x00- \ x20 \ x7F \ p {Zs} ]'鑑於']'關閉了字符類並且不會被轉義。因此,它首先匹配任何*字符,然後匹配第二組指定的字符。 – poke 2012-04-12 08:26:01

+1

不,[[^] [<>「\ x00- \ x20 \ x7F \ p {Zs}]'是一個字符類,第一個']被視爲文字'],因爲它是列出的第一個字符或者在這種情況下首先否定'^'),就像'-'一樣。這是一個很好的小隱形功能,我希望所有的功能都支持這個功能。 – 2012-04-12 09:07:29

+0

@AlanMoore謝謝,我知道我看到它在某處這個定義是這樣的,我在poke的評論之後在Regexr上進行了測試,但是這個功能並沒有提供,但是這個正則表達式只對這個解釋有意義。回滾我的答案 – stema 2012-04-12 09:11:07