È necessario abbinare quanto segue:
AAA123
ABCDEFGH123
XXXX123
posso fare ".*123"
:?
È necessario abbinare quanto segue:
AAA123
ABCDEFGH123
XXXX123
posso fare ".*123"
:?
Risposte:
Si, puoi. Dovrebbe funzionare.
.
= qualsiasi carattere\.
= il carattere punto reale.?
= .{0,1}
= corrisponde a qualsiasi carattere zero o uno volte.*
= .{0,}
= corrisponde a qualsiasi carattere zero o più volte.+
= .{1,}
= corrisponde a qualsiasi carattere una o più volteSì, funzionerà, sebbene si noti che .
non corrisponderà a newline a meno che non si passi il flag DOTALL durante la compilazione dell'espressione:
Pattern pattern = Pattern.compile(".*123", Pattern.DOTALL);
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.matches();
.
che corrispondesse a newline. Sono contento di aver letto la tua risposta, devo usarla!
{.,\n,\r,\u2028,\u2029,\u0085}
per abbinare qualsiasi carattere (i caratteri Unicode sono caratteri di fine riga aggiuntivi aggiunti non corrispondenti .
in Java), ma funzionerebbero solo {.,\n,\r}
per la maggior parte dei file di testo.
[\s\S]
è un modo popolare di abbinare qualsiasi personaggio se non puoi usare DOTALL.
(?:.|\\v)*
, a causa di JDK-6337993 .
Esistono molti sofisticati strumenti di test e sviluppo regex, ma se vuoi semplicemente un semplice cablaggio di test in Java, eccone uno con cui giocare:
String[] tests = {
"AAA123",
"ABCDEFGH123",
"XXXX123",
"XYZ123ABC",
"123123",
"X123",
"123",
};
for (String test : tests) {
System.out.println(test + " " +test.matches(".+123"));
}
Ora puoi facilmente aggiungere nuovi test e provare nuovi schemi. Divertiti a esplorare regex.
No, *
corrisponderà a zero o più caratteri. Dovresti usare +
, che corrisponde a uno o più invece.
Questa espressione potrebbe funzionare meglio per te: [A-Z]+123
Il modo più comune che ho visto per codificare questo è con una classe di caratteri i cui membri formano una partizione dell'insieme di tutti i possibili personaggi.
Di solito le persone che scrivono come [\s\S]
(spazi bianchi o non spazi bianchi), anche se [\w\W]
, [\d\D]
e così via sarebbe tutto il lavoro.
.*
e.+
sono per tutti i caratteri ad eccezione di nuove righe.
Nel caso in cui volessi includere nuove righe, le seguenti espressioni potrebbero funzionare anche per quei linguaggi che richiedono il doppio escape come Java o C ++:
[\\s\\S]*
[\\d\\D]*
[\\w\\W]*
per zero o più volte, oppure
[\\s\\S]+
[\\d\\D]+
[\\w\\W]+
per una o più volte.
Il doppio escape non è richiesto per alcune lingue come C #, PHP, Ruby, PERL, Python, JavaScript:
[\s\S]*
[\d\D]*
[\w\W]*
[\s\S]+
[\d\D]+
[\w\W]+
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegularExpression{
public static void main(String[] args){
final String regex_1 = "[\\s\\S]*";
final String regex_2 = "[\\d\\D]*";
final String regex_3 = "[\\w\\W]*";
final String string = "AAA123\n\t"
+ "ABCDEFGH123\n\t"
+ "XXXX123\n\t";
final Pattern pattern_1 = Pattern.compile(regex_1);
final Pattern pattern_2 = Pattern.compile(regex_2);
final Pattern pattern_3 = Pattern.compile(regex_3);
final Matcher matcher_1 = pattern_1.matcher(string);
final Matcher matcher_2 = pattern_2.matcher(string);
final Matcher matcher_3 = pattern_3.matcher(string);
if (matcher_1.find()) {
System.out.println("Full Match for Expression 1: " + matcher_1.group(0));
}
if (matcher_2.find()) {
System.out.println("Full Match for Expression 2: " + matcher_2.group(0));
}
if (matcher_3.find()) {
System.out.println("Full Match for Expression 3: " + matcher_3.group(0));
}
}
}
Full Match for Expression 1: AAA123
ABCDEFGH123
XXXX123
Full Match for Expression 2: AAA123
ABCDEFGH123
XXXX123
Full Match for Expression 3: AAA123
ABCDEFGH123
XXXX123
Se desideri esplorare l'espressione, è stata spiegata nel pannello in alto a destra di regex101.com . Se lo desideri, puoi anche guardare in questo link , come corrisponderebbe ad alcuni input di esempio.
jex.im visualizza le espressioni regolari:
(\W|\w)*
invece di doppia fuga
Soluzione specifica al problema di esempio: -
Prova [A-Z]*123$
corrisponderà 123
, AAA123
, ASDFRRF123
. Nel caso in cui sia necessario almeno un personaggio prima 123
dell'uso [A-Z]+123$
.
Soluzione generale alla domanda (Come abbinare "qualsiasi carattere" nell'espressione regolare):
[\w|\W]{min_char_to_match,}
.[\S]{min_char_to_match,}
.[^]
dovrebbe corrispondere a qualsiasi personaggio, incluso newline. [^
CHARS]
corrisponde a tutti i personaggi tranne quelli in CHARS . Se CHARS è vuoto, corrisponde a tutti i caratteri.
Esempio JavaScript:
/a[^]*Z/.test("abcxyz \0\r\n\t012789ABCXYZ") // Returns ‘true’.
Prova la regex .{3,}
. Questo corrisponderà a tutti i personaggi tranne una nuova riga.
Lavoro questo Non sempre punto è significa qualsiasi carattere. Eccezione in modalità linea singola. \p{all}
dovrebbe essere
String value = "|°¬<>!\"#$%&/()=?'\\¡¿/*-+_@[]^^{}";
String expression = "[a-zA-Z0-9\\p{all}]{0,50}";
if(value.matches(expression)){
System.out.println("true");
} else {
System.out.println("false");
}