Dieser Link zeigt einen Ansatz, der zu funktionieren scheint -> [^] + Was bedeutet, dass keine Zeichen übereinstimmen, ein doppeltes Negativ, das erneut als "mit jedem Zeichen übereinstimmen" gelesen werden kann. Quelle - loune.net/2011/02/…
HockeyJ
Antworten:
644
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 übereinstimmen
Nicht immer bedeutet Punkt ein Zeichen. Ausnahme im einzeiligen Modus. \ p {all} sollte sein
Mars
Wie können Sie einen umgekehrten Schrägstrich in diese Zeichenliste aufnehmen?
Suchergebnisse Web-Ergebnisse Pi
1
@pippilongstocking Rückwärts Schrägstrich ist `\\`
Poutrathor
58
Ja, das wird funktionieren. Beachten Sie jedoch, dass .die Zeilenumbrüche nur dann übereinstimmen, wenn Sie beim Kompilieren des Ausdrucks das DOTALL- Flag übergeben:
Das sind einige sehr nützliche Informationen! Ich nahm an, dass .die Zeilenumbrüche übereinstimmen würden. Ich bin froh, dass ich deine Antwort gelesen habe, das muss ich nutzen!
Ben Kane
Manchmal müssen Sie auch Zeilenumbrüche in Java-Regexen in Kontexten abgleichen, in denen Sie Pattern.DOTALL nicht übergeben können, z. B. bei einer mehrzeiligen Regex-Suche in Eclipse oder als Benutzer einer Java-Anwendung, die Regex-Suche anbietet. Basierend auf dem Handbuch für reguläre Ausdrücke.info müssen Sie möglicherweise {.,\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.
Theodore Murdock
8
@TheodoreMurdock [\s\S]ist eine beliebte Methode, um einen beliebigen Charakter zu finden, wenn Sie DOTALL nicht verwenden können.
Mpen
Falls es Ihnen in den Sinn kommt, verwenden Sie es (?:.|\\v)*wegen JDK-6337993 NICHT .
Olivier Cailloux
22
Verwenden Sie das Muster ., um ein beliebiges Zeichen einmal, ein .*beliebiges Zeichen null oder mehrmals oder ein .+beliebiges Zeichen einmal oder mehrmals abzugleichen.
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.
Upvote hier. Das OP hat nichts angegeben, aber es scheint richtig zu sein, hinzuzufügen, dass das Muster mit jedem Zeichen übereinstimmt, einschließlich Dingen wie ### 123, 123123,% $ # 123, die das OP möglicherweise nicht möchte. Die oben verwendete Zeichenklasse @Huusom verwendet im gesamten OP nur alphabetische Großbuchstaben, die möglicherweise beabsichtigt waren.
Techdude
9
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.
Als Referenz aus regulär-expressions.info / dot.html : "JavaScript und VBScript haben keine Option, um die Punkte mit Zeilenumbruchzeichen abzugleichen . In diesen Sprachen können Sie eine Zeichenklasse wie [\ s \ S] verwenden. Dieses Zeichen entspricht einem Zeichen, das entweder ein Leerzeichen (einschließlich Zeilenumbruchzeichen) oder ein Zeichen, das kein Leerzeichen ist. Da alle Zeichen entweder Leerzeichen oder Nicht-Leerzeichen sind, entspricht diese Zeichenklasse jedem Zeichen . "
Dean oder
7
.*und .+sind für alle Zeichen außer für neue Zeilen.
Doppelte Flucht
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.
Single Escaping:
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]+
Prüfung
import java.util.regex.Matcher;import java.util.regex.Pattern;publicclassRegularExpression{publicstaticvoid main(String[] args){finalString regex_1 ="[\\s\\S]*";finalString regex_2 ="[\\d\\D]*";finalString regex_3 ="[\\w\\W]*";finalString string ="AAA123\n\t"+"ABCDEFGH123\n\t"+"XXXX123\n\t";finalPattern pattern_1 =Pattern.compile(regex_1);finalPattern pattern_2 =Pattern.compile(regex_2);finalPattern pattern_3 =Pattern.compile(regex_3);finalMatcher matcher_1 = pattern_1.matcher(string);finalMatcher matcher_2 = pattern_2.matcher(string);finalMatcher 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));}}}
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.
[^]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.
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");}
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 übereinstimmenquelle
Ja, das wird funktionieren. Beachten Sie jedoch, dass
.
die Zeilenumbrüche nur dann übereinstimmen, wenn Sie beim Kompilieren des Ausdrucks das DOTALL- Flag übergeben:quelle
.
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 .Verwenden Sie das Muster
.
, um ein beliebiges Zeichen einmal, ein.*
beliebiges Zeichen null oder mehrmals oder ein.+
beliebiges Zeichen einmal oder mehrmals abzugleichen.quelle
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:
Jetzt können Sie ganz einfach neue Testfälle hinzufügen und neue Muster ausprobieren. Viel Spaß beim Erkunden von Regex.
Siehe auch
quelle
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
quelle
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.quelle
Doppelte Flucht
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:
für null oder mehr mal oder
für ein oder mehrere Male.
Single Escaping:
Für einige Sprachen wie C #, PHP, Ruby, PERL, Python, JavaScript ist kein doppeltes Escapezeichen erforderlich:
Prüfung
Ausgabe
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.
RegEx Circuit
jex.im visualisiert reguläre Ausdrücke:
quelle
(\W|\w)*
anstatt doppelt zu entkommenSpezifische Lösung für das Beispielproblem: -
Versuchen Sie
[A-Z]*123$
passt auf123
,AAA123
,ASDFRRF123
. Falls Sie vor der123
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,}
.quelle
[^]
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:
quelle
Probieren Sie die Regex
.{3,}
. Dies entspricht allen Zeichen außer einer neuen Zeile.quelle
Ich arbeite damit. Nicht immer bedeutet Punkt irgendein Zeichen. Ausnahme im einzeiligen Modus.
\p{all}
sollte seinquelle