Java正则expression式和美元符号

我有Javastring:

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

我也产生了模式,我想匹配这个string:

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

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

你需要在正则expression式中用反斜杠( \ )来转义$ ,但是作为反斜杠是string中的转义符,你需要转义反斜杠本身。

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

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

使用

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

自动转义给定string中的所有特殊的正则expression式字符 。

在Java的正则expression式两个.$是特别的。 你需要用2个反斜杠,即。

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

(1个反斜杠用于Javastring,1个用于正则expression式引擎。)

用美元逃脱美元

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

我build议你逃脱. 还有, . 代表任何angular色。

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