Folgendes sollte übereinstimmen:
AAA123
ABCDEFGH123
XXXX123
kann ich tun : ".*123"
?
Folgendes sollte übereinstimmen:
AAA123
ABCDEFGH123
XXXX123
kann ich tun : ".*123"
?
Antworten:
Ja, du kannst. Das sollte funktionieren.
.
= irgendein Zeichen\.
= das tatsächliche Punktzeichen.?
= .{0,1}
= ein beliebiges Zeichen null oder einmal übereinstimmen.*
= .{0,}
= ein beliebiges Zeichen null oder mehrmals übereinstimmen.+
= .{1,}
= ein oder mehrere Zeichen übereinstimmenJa, das wird funktionieren. Beachten Sie jedoch, dass .
die Zeilenumbrüche nur dann übereinstimmen, wenn Sie beim Kompilieren des Ausdrucks das DOTALL- Flag übergeben:
Pattern pattern = Pattern.compile(".*123", Pattern.DOTALL);
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.matches();
.
die Zeilenumbrüche übereinstimmen würden. Ich bin froh, dass ich deine Antwort gelesen habe, das muss ich nutzen!
{.,\n,\r,\u2028,\u2029,\u0085}
absolut jedes Zeichen abgleichen (die Unicode-Zeichen sind zusätzliche zeilenabschließende Zeichen, die .
in Java nicht übereinstimmen ), {.,\n,\r}
funktionieren jedoch nur für die meisten Textdateien.
[\s\S]
ist eine beliebte Methode, um einen beliebigen Charakter zu finden, wenn Sie DOTALL nicht verwenden können.
(?:.|\\v)*
wegen JDK-6337993 NICHT .
Es gibt viele ausgefeilte Regex-Test- und Entwicklungstools. Wenn Sie jedoch nur ein einfaches Test-Harness in Java benötigen, können Sie mit folgenden Tools spielen:
String[] tests = {
"AAA123",
"ABCDEFGH123",
"XXXX123",
"XYZ123ABC",
"123123",
"X123",
"123",
};
for (String test : tests) {
System.out.println(test + " " +test.matches(".+123"));
}
Jetzt können Sie ganz einfach neue Testfälle hinzufügen und neue Muster ausprobieren. Viel Spaß beim Erkunden von Regex.
Nein, entspricht *
null oder mehr Zeichen. Sie sollten verwenden +
, was stattdessen einem oder mehreren entspricht.
Dieser Ausdruck könnte für Sie besser funktionieren: [A-Z]+123
Die häufigste Art, dies zu codieren, ist eine Zeichenklasse, deren Mitglieder eine Partition des Satzes aller möglichen Zeichen bilden.
Normalerweise Leute schreiben , dass als [\s\S]
(Leerzeichen oder nicht-Leerzeichen), obwohl [\w\W]
, [\d\D]
etc. würden alle arbeiten.
.*
und.+
sind für alle Zeichen außer für neue Zeilen.
Nur für den Fall, dass Sie neue Zeilen einfügen möchten, funktionieren die folgenden Ausdrücke möglicherweise auch für Sprachen wie Java oder C ++, für die ein doppeltes Escapezeichen erforderlich ist:
[\\s\\S]*
[\\d\\D]*
[\\w\\W]*
für null oder mehr mal oder
[\\s\\S]+
[\\d\\D]+
[\\w\\W]+
für ein oder mehrere Male.
Für einige Sprachen wie C #, PHP, Ruby, PERL, Python, JavaScript ist kein doppeltes Escapezeichen erforderlich:
[\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
Wenn Sie den Ausdruck untersuchen möchten, wurde er oben rechts auf regex101.com erläutert . Wenn Sie möchten , können Sie in diesem Link auch sehen , wie es mit einigen Beispieleingaben übereinstimmt.
jex.im visualisiert reguläre Ausdrücke:
(\W|\w)*
anstatt doppelt zu entkommen
Spezifische Lösung für das Beispielproblem: -
Versuchen Sie [A-Z]*123$
passt auf 123
, AAA123
, ASDFRRF123
. Falls Sie vor der 123
Verwendung mindestens ein Zeichen benötigen [A-Z]+123$
.
Allgemeine Lösung für die Frage (Wie wird "ein beliebiges Zeichen" im regulären Ausdruck gefunden):
[\w|\W]{min_char_to_match,}
.[\S]{min_char_to_match,}
.[^]
sollte mit jedem Zeichen übereinstimmen, einschließlich Zeilenumbruch. [^
CHARS]
entspricht allen Zeichen außer denen in CHARS . Wenn CHARS leer ist, stimmt es mit allen Zeichen überein.
JavaScript-Beispiel:
/a[^]*Z/.test("abcxyz \0\r\n\t012789ABCXYZ") // Returns ‘true’.
Probieren Sie die Regex .{3,}
. Dies entspricht allen Zeichen außer einer neuen Zeile.
Ich arbeite damit. Nicht immer bedeutet Punkt irgendein Zeichen. Ausnahme im einzeiligen Modus. \p{all}
sollte sein
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");
}