比方說,我有一個正則表達式可以正常工作,找到所有的URL的一個文本文件:如何獲取正則表達式的逆函數?
(http://)([a-zA-Z0-9\/\.])*
如果我想是不是網址,但逆 - 除了網址的所有其他文本 - 是有一個簡單的修改,以獲得此?
比方說,我有一個正則表達式可以正常工作,找到所有的URL的一個文本文件:如何獲取正則表達式的逆函數?
(http://)([a-zA-Z0-9\/\.])*
如果我想是不是網址,但逆 - 除了網址的所有其他文本 - 是有一個簡單的修改,以獲得此?
如果由於某種原因,你需要一個唯一的正則表達式的解決方案,試試這個:
((?<=http://[a-zA-Z0-9\/\.#?/%]+(?=[^a-zA-Z0-9\/\.#?/%]))|\A(?!http://[a-zA-Z0-9\/\.#?/%])).+?((?=http://[a-zA-Z0-9\/\.#?/%])|\Z)
我擴大了一整套的URL字符的小([a-zA-Z0-9\/\.#?/%]
),包括一些重要的,但這決不意味着確切或詳盡。
正則表達式是有點怪的,所以我會盡力把它分解:
(?<=http://[a-zA-Z0-9\/\.#?/%]+(?=[^a-zA-Z0-9\/\.#?/%])
第一藥水URL的結尾匹配。 http://[a-zA-Z0-9\/\.#?/%]+
與URL本身相匹配,而(?=[^a-zA-Z0-9\/\.#?/%])
聲稱該URL必須後跟一個非URL字符,以便我們確信我們到了最後。使用向前查找,以便查找非URL字符但不捕獲。整個事情被包裹在一個倒影(?<=...)
中,以尋找它作爲比賽的邊界,同樣沒有捕獲該部分。
我們還希望在文件的開頭匹配一個非URL。 \A(?!http://[a-zA-Z0-9\/\.#?/%])
與文件的開頭(\A
)相匹配,然後是負向前視,以確保文件開頭處沒有潛在的URL。 (此URL檢查是比第一個更簡單,因爲我們只需要URL,而不是整個事情的開始。)
這兩項檢查都放在括號和OR
「隨着|
字符D一起。之後,.+?
與我們試圖捕獲的字符串相匹配。
然後我們來到((?=http://[a-zA-Z0-9\/\.#?/%])|\Z)
。在這裏,我們再次檢查網址的開頭是(?=http://[a-zA-Z0-9\/\.#?/%])
。文件的結尾也是一個很好的跡象,表明我們已經達到了比賽結束,所以我們也應該使用\Z
來查找。與第一大組類似,我們將它包括在括號和兩個可能性中。
|
符號需要括號,因爲它的優先級很低,所以您必須明確說明OR
的邊界。
該正則表達式很大程度上依賴於零寬度斷言(\A
和\Z
錨點以及環視組)。在將它用於任何嚴重或永久的任何事情之前,您應該始終了解正則表達式(否則您可能會遇到perl案例),因此您可能需要檢出Start of String and End of String Anchors和Lookahead and Lookbehind Zero-Width Assertions。
更正歡迎,當然!
我看你把這個當成了接受的答案。謝謝!不過,我想重申我對複雜正則表達式的警告。如果您或其他人將在稍後閱讀代碼,請將其記錄下來。 此外,[a-zA-Z0-9 \/\。#?/%]可以更改爲[a-zA-Z0-9 /.#?%] - 您(通常)不需要轉義字符組內的符號。根據您的要求,您可能還想嘗試使用https?://而不是http://以及其他可能的協議。不要忘記查看http://www.regular-expressions.info/,正如superjadex12建議的那樣。 – WCWedin 2009-07-19 13:28:16
您可以簡單地搜索並用空字符串替換與正則表達式匹配的所有內容。在Perl中s/(http:\/\/)([a-zA-Z0-9\/\.])*//g
這會給你在原始文本中的所有內容,除了那些匹配正則表達式的子字符串。
因此,在替換所有匹配之後,如果測試字符串的長度不爲零,那麼您的反轉正則表達式爲true。這正是我需要的邏輯,而不是構建一個倒轉的正則表達式。謝謝dmcer :) – Exter 2012-09-12 15:46:05
如果我正確地理解了這個問題,您可以在表達式中使用搜索/替換...只是通配符,然後替換第一個和最後一個部分。
s/^(.*)(your regex here)(.*)$/$1$3/
這隻會刪除一個匹配:最後一個。而且效率非常低。 – 2009-07-17 04:09:34
林不知道這是否會工作,完全按照自己的打算,但它可能會幫助: 無論你在[]將進行匹配的支架放置。如果將^放在括號內,即[^ a-zA-Z0-9 /。],它將匹配以外的所有內容,但括號內的內容除外。
您應該在上下文中包含指向原始問題的鏈接(http://stackoverflow.com/questions/1140921/regex-to-strip-out-image-urls)。 – Lee 2009-07-17 01:07:01