2012-05-03 10 views
17

Bitte helfen Sie mit der richtigen RegEx-Abgleich. Beliebige 2 Buchstaben gefolgt von einer beliebigen Kombination aus 6 ganzen Zahlen.RegEx Muster zwei beliebige Buchstaben gefolgt von sechs Zahlen

These would be valid: 
RJ123456 
PY654321 
DD321234 

These would not 
DDD12345 
12DDD123 
+0

Was ist mit "ABC1234567"; Könnte es jemals vorkommen? – Phrogz

+0

Es gibt keinen Fall für mehr als zwei Buchstaben oder 6 Zahlen. – Fergus

+3

Werden die "ganzen Zahlen" immer die westarabischen Ziffern "0-9" sein, oder gibt es jemals [andere Ziffern] (http://en.wikipedia.org/wiki/Numerical_digit#Numerals_in_most_popular_systems)? – Phrogz

Antwort

55

[a-zA-Z]{2}\d{6}

[a-zA-Z]{2} bedeutet zwei Buchstaben \d{6} Mittel 6 Ziffern

Wenn Sie nur Großbuchstaben wollen, dann:

[A-Z]{2}\d{6}

+0

funktioniert super .... – Fergus

+0

Sie vergaßen mit^zu beginnen, sonst, wenn Sie mehr als 2 Buchstaben haben, wird es teilweise übereinstimmen. –

16

Sie könnten so etwas wie dies versuchen:

[a-zA-Z]{2}[0-9]{6} 

Hier ist ein Zusammenbruch des Ausdrucks:

[a-zA-Z] # Match a single character present in the list below 
       # A character in the range between “a” and “z” 
       # A character in the range between “A” and “Z” 
    {2}   # Exactly 2 times 
[0-9]  # Match a single character in the range between “0” and “9” 
    {6}   # Exactly 6 times 

Dies wird überall in einem Thema passen. Wenn Sie um das Thema herum Grenzen haben möchten, können Sie einen der folgenden Schritte ausführen:

Damit wird sichergestellt, dass das gesamte Thema übereinstimmt. Es gibt nichts vor oder nach dem Thema.

oder

\b[a-zA-Z]{2}[0-9]{6}\b 

, die es gewährleistet, ist ein word boundary auf jeder Seite des Subjekts.

Wie von @Phrogz gezeigt, könnten Sie den Ausdruck kürzer machen, indem Sie die [0-9] für eine \d wie in einigen der anderen Antworten ersetzen.

[a-zA-Z]{2}\d{6} 
+0

@Phrogz haha, es ist eine Frage der Präferenz, denke ich, ich benutze normalerweise '\ d', aber ich weiß nicht, ich fühlte mich heute ein bisschen anders. Ich werde mich etwas anstrengen und es für Sie aktualisieren. – Robbie

+0

+1 Für gründlich und pedantisch;) – Phrogz

+0

Das hat wirklich geholfen. Beide RegEx's arbeiteten .. DANKE – Fergus

5

I abhängt, was die regexp Sprache, die Sie verwenden, aber informell wäre es:

[:alpha:][:alpha:][:digit:][:digit:][:digit:][:digit:][:digit:][:digit:] 

wo [:alpha:] = [a-zA-Z] und [:digit:] = [0-9]

Wenn Sie eine regexp Sprache verwenden, die endlichen Wiederholungen erlaubt, das würde wie folgt aussehen:

[:alpha:]{2}[:digit:]{6} 

Die korrekte Syntax von der jeweiligen Sprache abhängt du bist verwenden, aber das ist die Idee.

+0

[[: alpha:]] statt [: alpha:] um 2alpha und 6 Ziffern zu finden [[: alpha:]] {2} [[: digit:]] {6} –

2

Je nachdem, ob Ihr regex Geschmack unterstützt es, könnte ich benutze:

\b[A-Z]{2}\d{6}\b # Ensure there are "word boundaries" on either side, or 

(?<![A-Z])[A-Z]{2}\d{6}(?!\d) # Ensure there isn't a uppercase letter before 
           # and that there is not a digit after 
2

Alles, was Sie hier benötigen, können in this quickstart guide finden. Eine einfache Lösung wäre [A-Za-z][A-Za-z]\d\d\d\d\d\d oder [A-Za-z]{2}\d{6}. Wenn Sie nur Großbuchstaben akzeptieren möchten, ersetzen Sie [A-Za-z] durch .

Verwandte Themen