2010-10-04 16 views
18

ho stringa Java:Java espressioni regolari e il simbolo del dollaro

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

Inoltre ho generato modello contro il quale voglio abbinare questa stringa:

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

Quando dico b.matches(pattern) restituisce false. Ora so che il simbolo del dollaro fa parte di Java RegEx, ma non so come dovrebbe essere il mio modello. Suppongo che $ in pattern debba essere sostituito da alcuni caratteri di escape, ma non so quanti. Questo segno $ è importante per me in quanto mi aiuta a distinguere gli elementi nella lista (numeri dopo dollaro), e non posso farne a meno.

+0

Giusto per essere chiari, '$' in un'espressione regolare corrisponde alla fine della riga. La tua regex corrisponderà a una stringa la cui prima riga termina con 'Review' e la riga successiva inizia con il carattere' 0'. – Amarghosh

+3

@Amarghosh: Io non la penso così. Questa regex può * mai * corrispondere perché deve esserci un CR e/o LF tra la fine della riga uno e i primi caratteri della riga due. –

+1

@Tim Oops, hai ragione - l'ho perso. Dal momento che non posso più modificare il commento, permettimi di chiedere alla gente di correggere la correzione di Tim al mio primo commento__ – Amarghosh

risposta

27

Hai bisogno di fuggire $nel regex con un back-slash (\), ma come un back-slash è un carattere di escape in stringhe è necessario sfuggire alla stessa back-slash.

È necessario sfuggire a qualsiasi regex speciale nello stesso modo, ad esempio con ".".

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

In Java espressione regolare sia . e $ sono speciali. Hai bisogno di fuggire con 2 backslash, vale a dire.

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

(1 backslash è per la stringa di Java, e 1 è per il motore regex.)

2

fuga il dollaro con \

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

Ti consiglio di scappare anche ., . rappresentare qualsiasi personaggio.

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