2013-06-25 24 views
5

Moja aplikacja otrzymuje jeden kod kreskowy, którego długość jest zmienna. Może to być 5, 9, 12 lub 14. Próbuję użyć czegoś takiego: \w{14}|\w{12}|\w{9}|\w{5}Wyrażenia regularne (RegEx) - Jeden ciąg Zmienna długość

To wyrażenie regularne nie jest poprawne. Czy istnieje wyrażenie regularne dla różnych długości? lub Jaki jest właściwy sposób łączenia różnych wyrażeń regularnych?

Uwaga: Powód, dla którego używam wyrażeń regularnych, to długa historia.

+0

"* To wyrażenie regularne nie jest poprawne *," co jest z nim nie tak? –

+0

Co próbujesz osiągnąć i dlaczego Twoje rozwiązanie nie działa? –

+0

Problem granic? Spróbuj: '^ \ w {14} | \ w {12} | \ w {9} | \ w {5} $'. – Pragmateek

Odpowiedz

3

Najprawdopodobniej chciał w ten sposób:

"^(\w{14}|\w{12}|\w{9}|\w{5})$" 

Wskazówka grupowanie różnych długościach, otoczona rozpoczęcia i zakończenia wskaźników smyczkowych. Bez nich wszystko pasuje, jeśli \w{5} istnieje gdzieś w ciągu znaków.

+1

uwaga \ w to tylko a-z, A-Z, 0-9, w tym _ –

5

Czy tego właśnie szukasz?

\b(\w{14}|\w{12}|\w{9}|\w{5})\b 

Regular expression image

Będzie dopasować wszystkie te słowa w swoim ciągiem, które są albo 14, 12, 9 lub 5 znaków. Możesz następnie sprawdzić te mecze. Zobacz ciąg znaków, który zawiera kilka meczów i nie pasuje tutaj: http://www.debuggex.com/r/V9T8nHp7ep6yuJow

Jeśli chcesz tylko sprawdzić, czy cały ciąg jest pojedynczy, użyj tego (aby sprawdzić, czy zaczyna się i kończy z jedną z opcji):

^(\w{14}|\w{12}|\w{9}|\w{5})$ 

Ponadto, wszystkie kody kreskowe widziałem składać się tylko z cyfr, to jest to sprawa dla Ciebie, jak dobrze ... należy wymienić cały \w z \d która jest taka sama jak [0-9]

+0

Może to się nie powieść, jeśli w łańcuchu jest spacja. Np .: "abc 12345" może "pasować", ale wątpię, aby był to oryginalny plakat. –

+1

Zakładając, że otrzymany ciąg znaków jest całym kodem kreskowym, sugeruję, abyś użył metody^$, ponieważ ta metoda będzie pasowała do "djd 12345 ,,,", ponieważ 12345 ma 5 cyfr i pasuje do \ w {5} i znajduje się w obrębie słowa granica. –

+0

Tak, 12345 będzie pasować do ciągu znaków. Użytkownik może przeglądać dopasowania w ciągu testowym - tak jak w przykładzie w powyższym linku. Przypuszczam, że nie jestem pewien dokładnie, w jaki sposób użytkownik zamierza wdrożyć regex - co może zmienić wymagania. – smerny

Powiązane problemy