Was ist das Muster für eine leere Zeichenfolge?

7

Ich muss die Eingabe validieren: gültige Varianten sind entweder eine Zahl oder eine leere Zeichenfolge. Was ist der entsprechende reguläre Ausdruck?

%Vor%

UPD: suggeriere nicht "\ d *" bitte, ich bin nur neugierig, wie ich "repete" in "leere Zeichenfolge" sagen kann.

    
Roman 27.07.2010, 09:37
quelle

7 Antworten

14

In diesem speziellen Fall würde ^\d*$ funktionieren, aber im Allgemeinen, um pattern oder eine leere Zeichenfolge zu finden, können Sie Folgendes verwenden:

%Vor%

Erklärung

  • ^ und $ sind der Anfang bzw. das Ende der String-Anker.
  • | wird verwendet, um Alternativen, z. this|that .

Referenzen

Verwandte Fragen

Hinweis zum mehrzeiligen Modus

Im sogenannten Multiline-Modus ( Pattern.MULTILINE/(?m) in Java), passen die ^ und $ stattdessen auf den Anfang und das Ende der Zeile . Die Anker für den Anfang und das Ende des Strings sind nun \A bzw. \Z .

Wenn Sie sich im mehrzeiligen Modus befinden, wird die leere Zeichenfolge stattdessen mit \A\Z verglichen. ^$ würde einer leeren Zeile in der Zeichenfolge entsprechen.

Beispiele

Hier sind einige Beispiele, um die obigen Punkte zu veranschaulichen:

%Vor%

Hinweis zu Java matches

In Java versucht matches , ein Muster mit der gesamten Zeichenfolge abzugleichen.

Dies gilt für String.matches , Pattern.matches und %Co_de% .

Dies bedeutet, dass manchmal Anker für Java Matcher.matches weggelassen werden können, wenn sie sonst für andere Flavors und / oder andere Java-Regex-Methoden notwendig sind.

Verwandte Fragen

polygenelubricants 27.07.2010, 10:03
quelle
6
%Vor%

Entspricht 0 oder mehr Ziffern mit nichts davor oder danach.

Erläuterung:

Das '^' bedeutet Start der Linie. '$' bedeutet Ende der Zeile. '*' entspricht 0 oder mehr Vorkommen. Das Muster entspricht also einer ganzen Zeile mit 0 oder mehr Ziffern.

    
KaptajnKold 27.07.2010 09:41
quelle
3

Um die leere Zeichenfolge explizit anzupassen, verwenden Sie \A\Z .

Sie können oft auch ^$ sehen, was gut funktioniert, es sei denn, die Option ^ und $ wird nicht nur am Anfang oder am Ende der Zeichenfolge, sondern auch am Anfang / Ende von gesetzt jede Zeile. Wenn Ihre Eingabe niemals Zeilenumbrüche enthalten kann, dann ist ^$ natürlich vollkommen in Ordnung.

Einige Regex-Varianten unterstützen \A und \Z -Anker (insbesondere JavaScript) nicht.

Wenn Sie "leer" wie in "nichts oder nur Leerzeichen" zulassen wollen, dann gehen Sie für \A\s*\Z oder ^\s*$ .

    
Tim Pietzcker 27.07.2010 10:09
quelle
1

Nur als eine lustige Lösung können Sie tun:

%Vor%

Eine Ziffer, null mal. Ja, es funktioniert.

    
unbeli 27.07.2010 10:18
quelle
0

Es sollte nichts falsch mit nur "\d+|"

sein     
umop 27.07.2010 09:41
quelle
0

Eine der Möglichkeiten, auf der regulären Sprache als die Schließung der folgenden Dinge zu betrachten:

  1. Spezielle & lt; EMPTY_STRING & gt; ist die reguläre Sprache
  2. Jedes Symbol von alphaphet ist die gültige reguläre Sprache
  3. Jede Konkatentation und Vereinigung von zwei gültigen Regexps ist die reguläre Sprache
  4. Jede Vereinigung von zwei gültigen regulären Sprachen ist die reguläre Sprache
  5. Jede transitive Schließung der Regexp ist die reguläre Sprache

Konkrete Sprache ist konkretes Element dieser Schließung.

Ich habe kein leeres Symbol im POSIX-Standard gefunden, um eine normale Sprachidee auszudrücken aus Schritt (1).

Aber es gibt eine zusätzliche Sache wie das Fragezeichen dort, das durch die Posix-Definition folgendermaßen aussieht:

  

(Regexp | & lt; EMPTY_STRING & gt;)

So können Sie für bash, perl und python folgendermaßen vorgehen:

%Vor%     
bruziuz 17.09.2015 14:46
quelle
0

Um ein beliebiges Muster, das einer ganzen Zeichenfolge entspricht, zu erstellen, d. h. einem Muster, das einer leeren Zeichenfolge entspricht, zu erlauben, verwenden Sie eine optionale Gruppe :

%Vor%

Weitere Informationen finden Sie in der Regex-Demo

Wenn die Regex-Engine (wie in Java) zulässt, bevorzugen Sie eine nicht-einfangende Gruppe, da ihr Hauptzweck nur darin besteht, Untermuster zu gruppieren und die aufgezeichneten Unterwerte nicht beizubehalten:

%Vor%

Der ^ stimmt mit dem Anfang einer Zeichenkette überein (oder \A kann in vielen Varianten dafür verwendet werden), $ wird mit dem Ende der Zeichenkette übereinstimmen (oder \z kann verwendet werden, um die sehr genaue Übereinstimmung zu ermitteln enden in vielen Varianten, und auch Java, und die (....)? wird 1 oder 0 (aufgrund der ? quantifier) ​​ Sequenzen der Unterpattern in Klammern entsprechen.

Ein Java-Verwendungshinweis: Wenn in matches() verwendet, kann der anfängliche ^ und der nachlaufende $ weggelassen werden und Sie können

verwenden %Vor%     
Wiktor Stribiżew 04.11.2016 10:53
quelle

Tags und Links