2013-04-10 14 views
8

Potrzebuję wyrażenia regularnego dla ciągu znaków zawierającego dokładnie jedną literę.Wyrażenie regularne tylko dla jednego znaku

Na przykład powinno pasować:

  • 8*x=16
  • x+2=2
  • u329398239823
  • 43044343k43304403

... ale nie:

  • xsfdjfefljefe
  • 44434f9434343 f
  • 98(***(*)))(*)(0((-900-87
  • 32233232
+0

Pytanie nie jest jasne, jakiego rodzaju wyrażenie chcesz? [a-zA-Z] nie pasuje "8 * x = 16" – Daniel

+0

@simpleBob chce wyrażeń z jedną literą. – Loamhoof

+1

teraz to rozumiem, powinna być dokładnie jedna litera w całym ciągu znaków – Daniel

Odpowiedz

12
/^[^a-z]*([a-z])[^a-z]*$/i 

i do wielkości liter dopasowywania.

^ i $ kotwice, aby zmusić wyrażenie regularne do dopasowania do całego ciągu znaków.

() do przechwycenia litery.

+0

cóż, z jakiego ciągu testujesz go? – Loamhoof

+0

, które pasują do "44434f9434343 f" – Daniel

+0

Jeśli chcesz, po prostu użyj grupy przechwytującej. Edytowane. – Loamhoof

2

Spróbuj z:

/^[^a-z]*([a-z]{1})[^a-z]*$/gim 

Środki rozpocząć sznurka (^), a następnie dowolny znak nonalpha 0 lub więcej razy ([^a-z]*), a następnie dokładnie jeden alfa char przechwycony jako pierwszego meczu (([a-z]{1}), będzie dostępny w celu zastąpienia jako $1), a następnie ponownie zero lub więcej znaków niealfa, następnie koniec ciągu znaków ($).

Zobacz go w akcji here.

+0

Czy mogę zapytać, dlaczego zostałem odrzucony? –