2009-10-30 10 views
111

Ich versuche eine regular expression zu schreiben, die nur Kleinbuchstaben und bis zu 10 Zeichen erlaubt. Was ich bisher gesehen habe, sieht so aus:Regulärer Ausdruck zur Begrenzung der Anzahl der Zeichen auf 10

pattern: /^[a-z]{0,10}+$/ 

Dies funktioniert nicht oder kompilieren. Ich hatte eine Arbeitsgruppe ein, die nur Kleinbuchstaben erlauben würde, die dies war:

pattern: /^[a-z]+$/ 

Aber ich brauche die Anzahl der Zeichen zu begrenzen, bis 10.

+4

Die {} und + das gleiche tun (Zählung), so dass sie redundant sind, also den Fehler. – PhiLho

+1

Sie sollten das '+' aus/^ [a-z] {0,10} + $/fallen lassen. Es sollte sein/^ [az] {0,10} $/ –

+1

Beachten Sie, dass das Muster '^ [az] {0,10} + $' auf einigen Sprachen kompiliert und einige der bemerkenswerten sind Java, Perl (5.10+) , PHP, Ruby (1.9+). Siehe [diese Seite] (http://www.regular-expressions.info/possessive.html) für weitere Details. – Jerry

Antwort

247

Sie geschweifte Klammern verwenden können, um die Anzahl der Ereignisse zu steuern. Zum Beispiel bedeutet dies, 0 bis 10:

/^[a-z]{0,10}$/ 

Die Optionen sind:

  • {3} Genau 3 Vorkommen;
  • {6,} Mindestens 6 Vorkommen;
  • {2,5} 2 bis 5 Auftreten.

Siehe regular expression reference.

Ihr Ausdruck hatte ein + nach der schließenden geschweiften Klammer, daher der Fehler.

5

Es hängt sehr von dem Programm ab, das Sie verwenden. Verschiedene Programme (Emacs, vi, und Perl) verwenden etwas andere reguläre Ausdrücke. In diesem Fall würde ich sagen, dass im ersten Muster das letzte "+" entfernt werden sollte.

8

/^[a-z]{0,10}$/ sollte funktionieren. /^[a-z]{1,10}$/, wenn Sie mindestens ein Zeichen wie /^[a-z]+$/ tun möchten.

7

Es könnte vorteilhaft sein, greedy matching am Ende des Strings hinzuzufügen, so dass Sie Strings> als 10 akzeptieren können und der Regex nur bis zu den ersten 10 Zeichen zurückgibt. /^[a-z0-9]{0,10}$?/

2
grep '^[0-9]\{1,16\}' | wc -l 

Gibt die Zählungen mit genauen Übereinstimmung mit Limit zählen

Verwandte Themen