2010-10-04 41 views
18

que tienen Java cadena:Java expresiones regulares y signo de dólar

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

También he generada patrón contra el que yo quiero para que coincida con esta cadena:

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

Cuando digo b.matches(pattern) vuelve false. Ahora sé que el signo de dólar es parte de Java RegEx, pero no sé cómo debería ser mi patrón. Asumo que $ en el patrón debe ser reemplazado por algunos caracteres de escape, pero no sé cuántos. Este signo $ es importante para mí, ya que me ayuda a distinguir los elementos en la lista (números después del dólar), y no puedo prescindir de él.

+0

Para que quede claro, '$' en una expresión regular coincide con el final de la línea. Su expresión regular coincidirá con una cadena cuya primera línea termina con 'Review' y la siguiente línea comienza con el carácter' 0'. – Amarghosh

+3

@Amarghosh: No lo creo. Esta expresión regular * nunca * coincide * porque debe haber un CR y/o LF entre el final de la línea uno y los primeros caracteres de la línea dos. –

+1

@Tim Oops, tienes razón, me lo perdí. Como ya no puedo editar el comentario, permítanme pedirle a las personas que lean la corrección de Tim a mi primer comentario__ – Amarghosh

Respuesta

27

tiene que escapar $en la expresión regular con una barra invertida (\), sino como una barra invertida es un carácter de escape en cadenas que necesita para escapar de la barra invertida en sí.

Deberá escapar de cualquier carácter especial de expresión regular de la misma manera, por ejemplo con ".".

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

En expresiones regulares de Java tanto . y $ son especiales. Es necesario para escapar de ella con 2 barras invertidas, es decir.

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

(1 barra invertida es para la cadena de Java, y 1 es para el motor de expresiones regulares.)

2

Escapar del dólar con \

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

Le aconsejo que escape . también, . represente cualquier caracter.

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