/ / Regex per abbinare entrambe le barre in JAVA - java, regex

Regex per abbinare entrambe le barre in JAVA - java, regex

Voglio abbinare la barra in avanti / o barra posteriore in particolare stringa per es.
1. Hi/Hello/Bye/
2. HiHelloBye
3. HiHello/Bye
4. HiHelloBye
Nelle stringhe date solo l'ultimo record non deve essere confrontato perché non contiene neanche / o .

Quello che sto usando

if (strFile.matches(".*//.*"))
{
//String Matches.
}
else
{
//Does not match.
}

Questo corrisponde alla barra diretta / solo. Non so come scrivere regex per entrambe le barre (per OR condizione).

risposte:

30 per risposta № 1

Il "personaggio" che stai cercando corrisponde potrebbe essere:

"[/\\]"

duplicando prima il backslash per la stringa e poi ancora per il regex.

Questo è forse il bit più brutto delle espressioni regolari quando è necessario utilizzare i backslash nelle lingue che utilizzano anche la barra rovesciata per eseguire il escape delle stringhe.

Il compilatore Java vede la stringa "\\" nel codice sorgente e in realtà lo trasforma in "\" (dal momento che usa come personaggio di fuga).

Quindi l'espressione regolare lo vede "\" e, perché usa anche come personaggio di fuga, lo tratterà come un singolo carattere.

Come Liu Yan sottolinea in un commento, potresti liberarti di uno livello di backslash (il regex uno) utilizzando uno dei seguenti:

".*[/\x5c].*"
".*[/\u005c].*"

Questo potrebbe renderlo leggermente più leggibile.

Una volta completata questa riduzione, hai specificato una classe di caratteri composta da entrambe le barre e, se il personaggio in questione corrisponde a una di esse, restituisce true.

Il seguente codice mostra questo in azione:

public class testprog {
public static void checkString (String s) {
boolean yes = s.matches(".*[/\\].*");
System.out.println (""" + s + "": " + yes);
}

public static void main (String s[]) {
checkString ("Hi/Hello/Bye/");
checkString ("Hi\Hello\Bye\");
checkString ("Hi\Hello/Bye\");
checkString ("HiHelloBye");
}
}

e emette:

"Ciao / Ciao / Ciao /": vero "HiHelloBye": vero "Ciao Ciao / Ciao": vero "HiHelloBye": falso

2 per risposta № 2

Tu vuoi:

strFile.matches(".*[/\\].*")

Specifico, in sostituzione // con [/\\].

Hai solo bisogno di una barra in avanti, ma hai bisogno di 4 barre rovesciate, perché una singola è una fuga all'interno della stringa, e 2 è una via di fuga per la regex, quindi hai bisogno di 4.


2 per risposta № 3

Usa questo...

[ ] ti fornirà il O funzionalità.

Pattern pat = Pattern.compile("[/\\]");
Matcher m = pat.matcher("Hi/Hello/Bye/");

while (m.find()){

System.out.println(m.group());
}

0 per risposta № 4

Usa l'alternanza: strFile.matches(".*(/|\\).*") corrisponde a una barra in avanti o indietro. Potresti dare un'occhiata al Documentazione regex Java.