2010-08-25 105 views
0

我目前正在對雅虎的管道管道。我得到了一個RegExp來匹配一個URL。現在,我需要匹配無與倫比的才能刪除它,以便只有我的網址。我的正則表達式是:反轉匹配正則表達式

[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+ 

如何反轉匹配? (它必須通過另一個正則表達式完成,YPipes不支持任何其他方式。)

編輯:爲了澄清:我有一個字符串,並需要得到它裏面的第一個網址。這就是爲什麼沒有別的辦法......

+0

沒有了「不」啄工作?即像這樣:[^(your-regexp-here)] – RWS 2010-08-25 19:47:55

+2

不,你可以反轉字符類的方式,但不是整個正則表達式。 – 2010-08-25 19:57:59

+0

好的,謝謝,我的錯。抱歉。 – RWS 2010-08-25 20:05:56

回答

0

雅虎管道支持正則表達式替換(使用正則表達式的字符串模塊)。

然後匹配你想要的部分保留並將其捕獲到一個組中。你已經這樣做了,雖然你的正則表達式本身就是稍有不當,這裏是一個至少已糾正明顯的錯誤:

 
([A-Za-z]+://[A-Za-z0-9_-]+\.[A-Za-z0-9_:%&?/.=-]+) 
^  ^  ^
|   |   | 
|   |   + lone dashes always at the end of the character class! 
|   +--- forward slashes do not need to be escaped    
+--- capturing group 1, contents later accessible through $1 

,然後替換該組的內容整個字符串。只需將$1放入「替換爲」字段即可。實際上,這會消除您不想保留的所有內容。

因爲我不知道你的正則表達式實際上應該做的,我不能給你一個更好的版本。

作爲一般提示:正則表達式是永遠,只有約匹配的東西,從來沒有關於不匹配(即「不包括」)東西。有排除效果的正則表達式,但即使他們通過匹配來實現它。

+0

請閱讀編輯。我認爲,另一種可能性是將其他內容稍後捕獲以再次支持1美元。你有什麼想法嗎? – fb55 2010-08-25 20:24:35

+0

@ FB55:使用'[\ S \ S] *'之前和'[\ S \ S] *'正則表達式之後:'[\ S \ S] *([A-ZA-Z] +:/?/[A-ZA-Z0-9 _-] + \。[A-ZA-Z0-9 _:%/.=-?] +)[\ S \ S] *' – Tomalak 2010-08-25 21:09:32