2010-10-04 110 views
18

我有Java字符串:Java正则表达式和美元符号

String b = "/feedback/com.school.edu.domain.feedback.Review$0/feedbackId"); 

我也已经产生对抗,我想这个字符串匹配模式:

String pattern = "/feedback/com.school.edu.domain.feedback.Review$0(.)*"; 

当我说b.matches(pattern)返回false。现在我知道美元符号是Java RegEx的一部分,但我不知道我的模式应该如何。我假设$ in模式需要被一些转义字符替换,但不知道有多少。这个$符号对我很重要,因为它帮助我区分列表中的元素(美元之后的数字),而且我不能没有它。

+0

要明确一点,正则表达式中的'$'匹配行尾。你的正则表达式匹配一个字符串,其第一行以“Review”结尾,下一行以字符“0”开头。 – Amarghosh 2010-10-04 10:21:48

+3

@Amarghosh:我不这么认为。这个正则表达式可以不匹配,因为在第一行结尾和第二行第一个字符之间必须有一个CR和/或LF。 – 2010-10-04 11:55:06

+1

@Tim哎呀,你是对的 - 我错过了。由于我不能再编辑评论,让我只是让人们__读我的第一条评论的Tim的更正_ – Amarghosh 2010-10-04 12:59:10

回答

27

你需要逃避$在正则表达式用反斜杠(\),但作为一个反斜杠是字符串转义字符你需要逃避反斜杠本身。

您将需要以相同的方式转义任何特殊的正则表达式字符,例如使用“。”。

String pattern = "/feedback/com\\.navteq\\.lcms\\.common\\.domain\\.poi\\.feedback\\.Review\\$0(.)*"; 
6

在Java中的正则表达式都.$是特殊的。你需要用2个反斜线逃避它,即

"/feedback/com\\.navtag\\.etc\\.Review\\$0(.*)" 

(1反斜线是Java字符串,1是对正则表达式引擎。)

2

逃离美元与\

String pattern = 
    "/feedback/com.navteq.lcms.common.domain.poi.feedback.Review\\$0(.)*"; 

我建议你逃脱.以及.代表任何字符。

String pattern = 
    "/feedback/com\\.navteq\\.lcms\\.common\\.domain\\.poi\\.feedback\\.Review\\$0(.)*"; 
45

使用

String escapedString = java.util.regex.Pattern.quote(myString) 

automatically escape all special regex characters一个给定的字符串中。

+1

你的回答非常棒! – 2014-01-28 15:18:12

+0

这需要更多upvotes,采取我的。 – 2016-11-30 13:56:57

相关问题