it-swarm.com.de

Wie kann ein beliebiges Zeichen im regulären Ausdruck gefunden werden

Folgendes sollte übereinstimmen:

AAA123
ABCDEFGH123
XXXX123

kann ich: ".*123"?

195
Saobi

Ja, du kannst. Das sollte funktionieren.

  • . = irgendein Zeichen
  • \. = das tatsächliche Punktzeichen
  • .? = .{0,1} = entspricht einem beliebigen Zeichen null oder einmal
  • .* = .{0,} = null oder mehrmals mit einem beliebigen Zeichen übereinstimmen
  • .+ = .{1,} = ein oder mehrere Male mit einem beliebigen Zeichen übereinstimmen
482
Delan Azabani

Ja, das funktioniert, obwohl . nicht mit Zeilenumbrüchen übereinstimmt, es sei denn, Sie übergeben das Flag DOTALL beim Kompilieren des Ausdrucks:

Pattern pattern = Pattern.compile(".*123", Pattern.DOTALL);
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.matches();

Verwenden Sie das Muster ., um ein Zeichen einmalig zu finden, .*, um ein beliebiges Zeichen null oder mehr zu finden, .+, um ein oder mehrere Zeichen zu finden.

12
thr

Es gibt viele ausgereifte Test- und Entwicklungstools für Regex, aber wenn Sie nur einen einfachen Test-Harness in Java möchten, können Sie hier Folgendes 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 problemlos neue Testfälle hinzufügen und neue Muster ausprobieren. Viel Spaß beim Erkunden von Regex.

Siehe auch

10

Nein, * stimmt mit null oder mehr Zeichen überein. Sie sollten + verwenden, der stattdessen einem oder mehreren entspricht.

Dieser Ausdruck funktioniert möglicherweise besser für Sie: [A-Z]+123

6
Huusom

Versuchen Sie es mit dem Regex. {3,}. Dies entspricht allen Zeichen, die eine neue Zeile erwarten.

2
Ravi Shekhar

Die gebräuchlichste Art, dies zu kodieren, ist eine Zeichenklasse, deren Mitglieder eine Partition der Menge aller möglichen Zeichen bilden.

Normalerweise schreiben die Leute das als [\s\S] (Leerzeichen oder Nicht-Leerzeichen), obwohl [\w\W], [\d\D] usw. alle funktionieren würden.

0
Jamie Davis

Die, die mir geholfen hat, falls Sie Interesse haben, einfach einen Charakter zu überprüfen

[^]+
0
vipin goyal

Spezifische Lösung für das Beispielproblem: -

Versuchen Sie [A-Z] * 123 $ stimmt mit 123, AAA123, ASDFRRF123 überein. Falls Sie vor 123 mindestens ein Zeichen benötigen, verwenden Sie [A-Z] + 123 $.

Allgemeine Lösung für die Frage (Wie wird "beliebiges Zeichen" im regulären Ausdruck gefunden?): -

  1. Wenn Sie nach Whitespace suchen, können Sie [\ w |\W] {min_char_to_match} versuchen.
  2. Wenn Sie versuchen, etwas außer Whitespace zu finden, können Sie [\ S] {min_char_to_match} versuchen.
0
Akash Seth