Meta carattere Java RegEx (.) E punto ordinario?

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.