In Java RegEx, come scoprire la differenza tra .
(punto) il meta-carattere e il punto normale come usiamo in qualsiasi frase. Come gestire questo tipo di situazione anche per altri meta caratteri come ( *
, +
, /d
, …)
Se si desidera che il punto o altri caratteri con un significato speciale in espressioni regolari sia un carattere normale, è necessario sfuggirlo con una barra rovesciata. Dal momento che le espressioni regolari in Java sono stringhe Java normali, è necessario eseguire l’escape della barra retroversa, quindi sono necessari due backslash, ad esempio \\.
Le soluzioni proposte dagli altri membri non funzionano per me.
Ma ho trovato questo:
per evitare un punto in java regexp scrivi [.]
Le espressioni regolari in stile Perl (su cui si basa più o meno il motore regex di Java) trattano i seguenti caratteri come caratteri speciali:
.^$|*+?()[{\
ha un significato speciale al di fuori delle classi di caratteri,
]^-\
ha un significato speciale all’interno delle classi di caratteri ( [...]
).
Quindi è necessario sfuggire a quei (e solo a quelli) simboli a seconda del contesto (o, nel caso di classi di caratteri, posizionarli in posizioni in cui non possono essere interpretati erroneamente).
È ansible che l’escape di altri caratteri sia inutile, ma alcuni motori regex considereranno questo come errori di syntax, ad esempio \_
causerà un errore in .NET.
Alcuni altri porteranno a risultati falsi, per esempio \<
è interpretato come un letterale <
in Perl, ma in egrep
significa "limite di parola".
Quindi scrivi -?\d+\.\d+\$
per abbinare 1.50$
, -2.00$
ecc. E [(){}[\]]
per una class di caratteri che corrisponde a tutti i tipi di parentesi / parentesi graffe / parentesi.
Se è necessario trasformare una stringa di input dell'utente in un modulo regex-safe, utilizzare java.util.regex.Pattern.quote
.
Ulteriori letture: il blog di Jan Goyvaert RegexGuru sui metacaratteri in fuga
Sfuggi ai personaggi speciali con una barra rovesciata. \.
, \*
, \+
, \\d
, e così via. Se non sei sicuro, puoi sfuggire a qualsiasi carattere non alfabetico indipendentemente dal fatto che sia speciale o meno. Vedere javadoc per java.util.regex.Pattern per ulteriori informazioni.
Volevo abbinare una stringa che termina con “. *” Per questo ho dovuto usare quanto segue:
"^.*\\.\\*$"
Un po ‘sciocco se ci pensate: D Ecco cosa significa. All’inizio della stringa ci può essere qualsiasi carattere zero o più volte seguito da un punto “.” seguito da una stella (*) alla fine della stringa.
Spero che questo sia utile per qualcuno. Grazie per la cosa di backslash a Fabian.
Ecco il codice che puoi copiare direttamente pasta:
String imageName = "picture1.jpg"; String [] imageNameArray = imageName.split("\\."); for(int i =0; i< imageNameArray.length ; i++) { system.out.println(imageNameArray[i]); }
E se per errore ci sono spazi prima o dopo "." in tali casi? È sempre buona pratica considerare anche questi spazi.
String imageName = "picture1 . jpg"; String [] imageNameArray = imageName.split("\\s*.\\s*"); for(int i =0; i< imageNameArray.length ; i++) { system.out.println(imageNameArray[i]); }
Qui \\ s * è lì per considerare gli spazi e darti solo stringhe divise richieste.
Se vuoi terminare controlla se la tua frase finisce con “. ” Allora devi aggiungere [\. \ ] $ Alla fine del tuo pattern.
Sto facendo un array di base in JGrasp e ho scoperto che con un metodo accessor per un array char [] [] da usare (‘.’) Per posizionare un singolo punto.