Was ist das Muster für leeren string?
Muss ich Eingaben überprüfen: gültige Varianten sind entweder Zahl oder eine leere Zeichenkette. Was ist der Korrespondent regulären Ausdruck?
String pattern = "\d+|<what shoudl be here?>";
UPD: nicht zu empfehlen "\d*" bitte, ich bin nur neugierig, wie Sie sagen, "leere Zeichenfolge" in regexp.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In diesem speziellen Fall
^\d*$
funktionieren würde, aber in der Regel zu entsprechenpattern
oder eine leere Zeichenfolge, die Sie verwenden können:Erklärung
^
und$
sind der Beginn und das Ende der Zeichenfolge Anker bzw.|
ist die Bezeichnung wechselt, z.B.this|that
.Referenzen
Fragen
Hinweis auf multiline-Modus
In der so genannten multiline-Modus (
- Muster.MULTILINE/(?m)
in Java), die^
und$
den Anfang und das Ende des Linie statt. Die Anker für Anfang und Ende des Strings sind jetzt\A
und\Z
bzw.Wenn Sie im multiline-Modus, dann wird der leere string gematcht durch
\A\Z
statt.^$
würde mit einer leeren Zeile in der Zeichenfolge.Beispiele
Hier sind einige Beispiele zur Veranschaulichung der obigen Punkte:
Hinweis auf Java -
matches
In Java
matches
versucht, ein Muster gegen die gesamte Zeichenfolge.Dies gilt für
- String.matches
,- Muster.matches
undMatcher.matches
.Dies bedeutet, dass manchmal, Anker verzichtet werden kann, für Java
matches
wenn Sie sonst für andere Aromen und/oder anderen Java-regex-Methoden.Fragen
- String.matches()
Entspricht 0 oder mehr Ziffern, mit nichts davor oder danach.
Erklärung:
Den '^' bedeutet Zeilenanfang. '$' bedeutet das Ende der Zeile. '*' entspricht 0 oder mehr vorkommen. Also das Muster passt eine ganze Zeile, die mit 0 oder mehr stellen.
Explizit match der leeren Zeichenfolge verwenden Sie
\A\Z
.Kann man auch oft sehen
^$
welche gut funktioniert, es sei denn, die option ist eingestellt, dass die^
und$
Anker zu entsprechen, nicht nur am Anfang oder Ende der Zeichenkette, aber auch am Anfang/Ende jeder Zeile. Wenn Ihr input kann nie Zeilenumbrüche enthalten, dann natürlich^$
ist vollkommen OK.Einige regex-Geschmack nicht unterstützen
\A
und\Z
Anker (vor allem JavaScript).Wenn Sie zulassen möchten, dass "leer", wie in "nichts oder nur Leerzeichen", dann gehen Sie für
\A\s*\Z
oder^\s*$
.Nur als eine lustige Lösung, die Sie tun können:
Einer Ziffer, null mal. Ja, es funktioniert.
Sollte es nichts falsch mit einfach nur
"\d+|"
matches
, dann wird das Muster abgestimmt werden, gegen den ganzen Eingabe-string sowieso. Das ist in Java"blah".matches("")
istfalse
.Einem die Möglichkeit zu sehen, auf den Satz der regulären Sprache als die Schließung der folgenden Dinge:
Konkreten reguläre Sprache ist konkrete element dieser Schließung.
Empfinde ich nicht als leeres symbol in POSIX-standard Ausdrücken reguläre Sprache Idee aus Schritt (1).
Aber es existieren zusätzliche Sache wie Fragezeichen gibt, die von der posix-definition ist die folgende:
So dass Sie tun können, in der folgenden Weise für die bash, perl und python:
Machen jedes Muster entspricht einer kompletten Zeichenfolge optional, d.h. ermöglichen ein Muster, der einem leeren string entsprechen, verwenden Sie eine optionale Gruppe:
Sehen die regex-demo
Wenn die regex-engine ermöglicht (wie in Java), lieber eine non-capturing-group, da Ihr Hauptzweck ist die einzige Gruppe, die Subpattern nicht halten subvalues erfasst:
Den
^
wird mit dem Anfang einer Zeichenfolge (oder\A
kann verwendet werden, in vielen Geschmacksrichtungen für diese),$
wird mit dem Ende der Zeichenfolge (oder\z
können verwendet werden, um die übereinstimmung ganz am Ende in vielen Geschmacksrichtungen, und Java auch), und die(....)?
passen auf 1 oder 0 (aufgrund der?
Quantifizierer) Sequenzen der Subpattern in Klammern.Java-Nutzung Hinweis: bei Verwendung in
matches()
die ersten^
- und Hinterkante$
können weggelassen werden und Sie können