2010-03-26 73 views
2

找不到匹配以下字符串的正則表達式時遇到問題。包含元字符的正則表達式和匹配URL

Korben;http://feeds.feedburner.com/KorbensBlog-UpgradeYourMind?format=xml;1 

一個問題是逃避問號。 Java的模式匹配器似乎並不接受\?作爲有效的轉義序列,但它也無法與myregexp.com上的測試器一起使用。

這是我到目前爲止有:

([a-zA-Z0-9])+;http://([a-zA-Z0-9./-]+);[0-9]+ 

有什麼建議?

編輯:最初的意圖是匹配在第一個分號後可以找到的所有URL。

回答

3

如果要將表達式放在字符串中,則還需要轉義「\」。那就是:

String expr = "([a-zA-Z0-9])+;http://([a-zA-Z0-9./\\-\\?]+);[0-9]+"; 

您還需要難逃「 - 」如果它不是一個字符類中的最後一個字符([...])構造。

+3

你也可以把 - 放在字符類的開頭。 – Kibbee 2010-03-26 00:57:39

+0

感謝codeka和其他人回覆。經過一些測試後,以下內容應與所有網址匹配:([a-zA-Z0-9])+; http://([a-zA-Z0-9./\\-\\?=~] +) ; [0-9] + – 2010-03-26 01:09:46

+1

您希望第一個加號*在圓括號內:'([a-zA-Z0-9] +)',而不是'([a-zA-Z0-9])+ 。另外,正如@DVK所指出的那樣,你不需要在字符類中轉義問號; '[a-zA-Z0-9 ./?-]'工作得很好。 – 2010-03-26 03:48:01

1

[?]匹配「?」

+0

我很想在將來使用它,而不是用反斜槓搞亂;) – 2010-03-26 01:14:39

1

也許你需要轉義你的反斜槓,如果你的表達式是在一個字符串中。喜歡的東西"\\?"

1
([a-zA-Z0-9]+);http://([a-zA-Z0-9./-]+)(\?[^;]+);([0-9]+) 

對我的作品上RexExp編輯網站。

相關問題