2011-01-24 13 views
6
strOutput.replace("/{{[^]*?}}/g",""); 

C'è un modo per convertire espressioni regolari di JavaScript in espressioni regex sicure di Java?Come convertire javascript regex in regex java sicuro?

La dichiarazione di cui sopra mi dà l'errore:

Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\)

io non sono tutto che la familiarità con regex, così ho potuto usare alcune indicazioni.

Grazie!

+1

Puoi pubblicare il Java che hai creato per darti l'errore? –

risposta

11

Sbarazzarsi delle barre in avanti. Non hai bisogno di quelli in Java. Inoltre, il sapore di regex di Java non riconosce gli switch come /g e /i; quelli sono controllati da costanti in java.util.regex.Pattern.

Gli unici interruttori regex Javascript che hanno senso nel mondo Java sono /i e /m. Queste mappe sono disponibili a Pattern.CASE_INSENSITIVE e Pattern.MULTILINE (è possibile utilizzare questi interruttori quando si crea un'espressione regolare dalla classe Pattern oppure è possibile utilizzarli in linea. Lo mostrerò in seguito).

Il /g non esegue il mapping su alcunché, ma è possibile controllare il comportamento di sostituzione utilizzando String.replaceAll rispetto a String.replaceFirst.

Per ottenere il codice per lavorare, dovreste fare qualcosa di simile:

strOutput.replaceAll("{{[^]*?}}", ""); 

Se si voleva utilizzare gli interruttori, è necessario fare aggiungere qualcosa come (?i) all'inizio della regex.

Non è possibile utilizzare String.replace perché contiene un CharSequence per il primo argomento e non un'espressione regolare.

Inoltre, tieni presente che i metodi di "regex rapido" offerti dalla classe String potrebbero non funzionare come previsto. Questo perché quando si specifica un pattern (diciamo abc) come un'espressione regolare per matches ad esempio, il modello effettivo visto da Java è ^abc$. Quindi abc corrisponderà, ma non lo sarà il bc.

C'è più informazioni here.

0

Non è necessario il / (barre iniziali all'inizio e alla fine) quelle sono utilizzate in javascript per la dichiarazione incorporata anziché le virgolette.

dovrebbe essere solo Regex r = new Regex("{{[^]*?}}");

1

Sbarazzarsi della "/" e "/g" all'inizio e alla fine della regex. Quindi è necessario sfuggire ad ogni occorrenza "\" in questo modo: "\\".

La parte "g" indica globale. Questo è controllato nel modo in cui si utilizza la regex in Java rispetto alla stringa regex.