2010-03-26 77 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编辑网站。

相关问题