Bessere Möglichkeit, reguläre Ausdrücke zu schreiben

8

Also, ich habe versucht, einen regulären Ausdruck für etwas wie einen Widerstandswert auszugeben, der eine bestimmte Anzahl von Ziffern und höchstens einen Buchstaben enthält, aber immer eine bestimmte Anzahl von Zeichen insgesamt (verwenden wir das Beispiel) eines vierstelligen Widerstandscodes).

Erstens könnte ich '\d*[RKM]\d*' machen, aber das würde etwas wie 'R' erlauben.

Auch könnte ich etwas wie '[\dRKM]{4}' machen, aber das wird Dinge wie 'RRR4' erlauben, was kein Wert ist, den ich möchte.

'\d{1,4}[Rr]\d{0,3} | ([RKM]\d{3}) | (\d{4})' , obwohl genauer, würde trotzdem '1234R567' erlauben, was nicht vier Zeichen ist.

Also, gibt es im Prinzip eine kompaktere Art, '[RKM]\d\d\d | \d[RKM]\d\d | \d\d[RKM]\d | \d\d\d[RKM] | \d\d\d\d' zu schreiben?

    
Marcus Gladir 17.07.2013, 13:18
quelle

1 Antwort

9

Je nach Regex-Geschmack können Sie ein Lookahead verwenden:

%Vor%
  • (?!(?:\d*\D) - Stellen Sie sicher, dass keine zwei nicht-einstelligen Zeichen vorhanden sind.

Oder:

%Vor%
  • (?=.{4}$) - Stellen Sie sicher, dass die Länge der Zeichenfolge 4 ist.

Siehe auch: Reguläre Ausdrücke: Gibt es einen UND-Operator?

    
Kobi 17.07.2013, 13:37
quelle

Tags und Links