2012-10-17 70 views
2

我已經有了這段代碼來抓取一個textarea內的URL。它一直在努力,直到我嘗試了一個帶有'+'的網址。Java正則表達式逃脫

Pattern pattern = Pattern.compile("(.*)(https?[://.0-9-?a-z=_#!A-Z]*)(.*)"); 
Matcher matcher = pattern.matcher(text); 

於是,我puting在我的代碼\\+\\\\+,但沒有奏效。所以,我做了一些谷歌搜索和堆棧溢出問題不停地提這傢伙

Pattern.quote("+"); 

但是,我不知道我是如何實現這種說法成什麼樣我現在有現在。如果那是我想要的方式。但我假設我需要做這樣的事情...

String quote = Pattern.quote("+"); 
Pattern pattern = Pattern.compile("(.*)(https?[://.0-9-?a-z=_#!A-Z]*)(.*)"); 
Matcher matcher = pattern.matcher(text); 

然後在模式中的某處添加變量引號?請幫忙!我今天剛學到這東西,我是全新的!謝謝?

回答

1
(https?[://.0-9-?a-z=_#!A-Z]*) 

記住,[]表示一類的人物,而這意味着,其中的任何字符將被包括在內。 [aegl]+將匹配「年齡」,「a」,「e」,「g」,「eagle」和「gaggle」,這也意味着列出兩次的字符(如/)完全是多餘的。是有用的,但只會有任何特殊字符前一個反斜槓返回相同的字符串。Pattern.quote("+")將返回\+

因爲+擁有方括號之間沒有意義,你應該能夠把方括號內的+轉義。在這一點上,如果它讓你感覺更好,你還可以添加一個\\

Pattern pattern = Pattern.compile("(.*)(https?[:/.0-9-?a-z=_#!A-Z+]*)(.*)"); 
Pattern pattern = Pattern.compile("(.*)(https?[:/.0-9-?a-z=_#!A-Z\\+]*)(.*)"); 

請看這裏:http://fiddle.re/0780

+0

非常感謝您的解釋。很多東西對我來說,我學到了很多東西,不幸的是,這似乎在控制檯中很好用,但每次都會在我的網絡應用程序中崩潰,它只是因爲某些原因而不喜歡+符號, t理解爲什麼 – gmustudent

+0

@gmustudent聽起來很棘手,也許我可以在[一個SO聊天室]幫助你(http://chat.stackoverflow.com/rooms/18144/regex)。 –

3

只是逃避報價與\,例如

Pattern pattern = Pattern.compile("(.*)(https?[://.0-9-?a-z=_#!A-Z\"]*)(.*)"); 
+0

也刪除'//'。 a)它應該是\\ b)你不需要像這樣在字符類 – Bohemian

+0

內轉義點? Pattern pattern = Pattern.compile(「(。*)(https?[://.0-9-?a-z = _#!A-Z \」quote \「] *)(。*)」); – gmustudent

+0

@波希米亞,我不明白。你爲什麼要移除''''?我認爲它沒有逃脫點。 –