2010-05-31 5 views
10

ho una regex definito in Python/Rubino/PHP che è come questoUn modo semplice per convertire espressioni regolari in espressioni rege compatibili con Java?

"(forumdisplay.php\?.*page=%CURRENTPAGE%)" 

quando lo faccio per Java, devo raddoppiare sfuggire che punto interrogativo per \\?

Come così:

"(forumdisplay.php\\?.*page=%CURRENTPAGE%)"; 

Esiste una funzione che posso utilizzare per farlo automaticamente? O dovrei cambiare tutte le regex per lavorare con il motore regex di Java?

+2

Si dovrebbe anche scappare un punto ('.') che ha un significato speciale (ogni carattere). – Crozin

risposta

0

Un buon inizio è di solito fare semplicemente un "Trova Sostituisci tutto" di "\" con "\\".

Non si sta davvero apportando una modifica per farlo funzionare con il motore regex java. Stai solo avendo a che fare con il problema di memorizzare una regex in una stringa Java ... Potresti farlo in una funzione, ma ciò renderebbe più codice da mantenere. Vorrei suggerire di fare a find sostituire come descritto sopra ...

1

Personalmente io uso all'interno di Eclipse plugin eccellente dal sito http://www.bastian-bergerhoff.com/eclipse/features/
Vi troverete QuickREx per l'espressione regolare e anche plug developper XPath che uso molto.
Per QuickREx, basta testare le espressioni regolari e premere il pulsante per copiarlo sull'editor attivo con caratteri di escape validi.
È un must, provalo.

+0

Ciao, il tuo link non è più valido. Errore 404 –

3

Si noti che questo è non il motore delle espressioni regolari Java che richiede le doppie barre inverse, ma il Java compilatore. Quando si scrive il seguente nel codice sorgente di Java:

"(forumdisplay.php\\?.*page=%CURRENTPAGE%)" 

il compilatore Java interpreta come la stringa:

(forumdisplay.php\?.*page=%CURRENTPAGE%) 

Il normale motore delle espressioni Java poi fa esattamente la stessa cosa di altri motori di espressioni regolari - il punto interrogativo (perché è sfuggito) è trattato letteralmente.

Una cosa simile accade in Python - le due stringhe di seguito sono identiche:

r"(forumdisplay.php\?.*page=%CURRENTPAGE%)" 
"(forumdisplay.php\\?.*page=%CURRENTPAGE%)" 

Questo utilizza il pitone r notazione per una stringa "grezza" dove backslash non vengono interpretati dal compilatore.

+1

e non c'è equivalente alla stringa raw in java? – James

+0

No, devi fare la doppia escape in Java – bwawok

10

provare questo strumento on-line out: http://www.regexplanet.com/advanced/java/index.html

Prende l'espressione regolare normale ed emette l'espressione stringa di java-compatibili. Mi ha risparmiato un sacco di tempo convertendo me stesso stringhe regex enormi.

Si noti che non tutte le espressioni regex funzionano in java. Ho visto regex di validazione php strane che si comportano semplicemente in modo diverso nella corrispondenza del modello java.

+0

Questo ragazzo ha la risposta –