Expressões regulares de Java e cifrão

Eu tenho uma string Java:

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

Eu também tenho gerado padrão contra o qual eu quero coincidir com esta cadeia:

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

Quando digo b.matches(pattern) , retorna false . Agora eu sei que o cifrão faz parte do Java RegEx, mas não sei como deve ser o meu padrão. Estou assumindo que o padrão $ in precisa ser substituído por alguns caracteres de escape, mas não sei quantos. Esse sinal de $ é importante para mim, pois me ajuda a distinguir elementos na lista (números após dólar), e não posso ficar sem ele.

Você precisa escaping $ na regex com uma barra invertida ( \ ), mas como uma barra invertida é um caractere de escape em strings você precisa escaping da barra invertida em si.

Você precisará escaping de qualquer caractere regex especial da mesma maneira, por exemplo, com “.”.

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

Usar

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

para escaping automaticamente todos os caracteres regex especiais em uma determinada string.

Em Java regex ambos . e $ são especiais. Você precisa escaping com 2 barras invertidas, ou seja.

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

(1 barra invertida é para a cadeia Java e 1 é para o mecanismo regex.)

Fuja do dólar com \

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

Eu aconselho você a fugir . também . representa qualquer personagem.

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