Regex tak naprawdę nie analizuje. Spróbuj wyodrębnić wszystkie rzeczy podobne do liczb i odszukaj te, które nie są liczbami szesnastkowymi.
Blender
Odpowiedzi:
193
A co z następującymi?
0[xX][0-9a-fA-F]+
Dopasowuje wyrażenie zaczynające się od 0, po którym następuje mała lub duża litera x, po którym następuje jeden lub więcej znaków z zakresu 0-9, lub af lub AF
@NiklasB. Twój skrót jest ważny tylko wtedy, gdy używasz wyrażenia regularnego perl, jeśli używasz wyrażenia regularnego POSIX, to rozwiązanie Stevena jest najkrótsze. Tak czy inaczej, rozwiązanie Stevena działa zarówno dla perl, jak i dla POSIX regex.
David M. Syzdek
Rozumiem! Rozwiązanie Stevena jest dobre, jeśli liczba szesnastkowa zaczyna się od 0x lub 0X. Ten powinien działać lepiej: ^ [0-9A-F] + $ Potrafi również rozpoznawać wzorce szesnastkowe, takie jak: '535GH0G73' W Javie możemy użyć np. String.matches (), aby to sprawdzić .. Dziękuję za odpowiedź :)
saurcery
2
„0x [\ da-f] {2}” też zdecydowanie lepiej ograniczyć liczbę
Yazan Rawashdeh
2
Czy pasowałoby to do drugiej i trzeciej przykładowej liczby, 0acdadecf822eeff32aca5830e438cb54aa722e3 i 8BADF00D?
Peter Mortensen,
44
Dokładna składnia zależy od twoich dokładnych wymagań i języka programowania, ale zasadniczo:
/[0-9a-fA-F]+/
lub po prostu isprawia , że wielkość liter nie jest rozróżniana.
/[0-9a-f]+/i
Jeśli masz szczęście, że używasz Rubiego, możesz:
/\h+/
EDYCJA - odpowiedź Stevena Schroedera uświadomiła mi, że moje rozumienie bitu 0x było błędne, więc odpowiednio zaktualizowałem moje sugestie. Jeśli chcesz również dopasować 0x, odpowiednikami są
/0[xX][0-9a-fA-F]+//0x[0-9a-f]+/i
/0x[\h]+/i
DODANO WIĘCEJ - Jeśli 0x musi być opcjonalne (jak sugeruje pytanie):
Nic wielkiego, ale większość silników regex obsługuje klasy znaków POSIX i jest [:xdigit:]do dopasowywania znaków szesnastkowych, co jest prostsze niż zwykłe 0-9a-fA-Frzeczy.
Tak więc wyrażenie regularne zgodnie z żądaniem (tj. Z opcją 0x) to:/(0x)?[[:xdigit:]]+/
Jeśli szukasz określonego znaku szesnastkowego w środku ciągu, możesz użyć „\ xhh”, gdzie hh to znak szesnastkowy. Próbowałem i działa. Używam frameworka dla C ++ Qt, ale może rozwiązać problemy w innych przypadkach, w zależności od smaku, którego potrzebujesz (php, javascript, python, golang itp.).
Hej! Chociaż może to być prawdą w przypadku perla, nie wydaje się, aby miało to miejsce w przypadku wyrażeń regularnych we wszystkich językach programowania. Zgodnie z tym\x jest odpowiednikiem \uw innych językach.
Maurice,
Co to jest „especific anda”?
Peter Mortensen
0
Dzięki temu masz nie więcej niż trzy prawidłowe pary:
(([a-fA-F]|[0-9]){2}){3}
Jakiekolwiek mniej lub więcej niż trzy pary prawidłowych znaków nie pasują.
Inny przykład: wartości szesnastkowe dla kolorów css zaczynają się od krzyżyka lub krzyżyka (#), a następnie sześć znaków, które mogą być cyfrą lub literą z przedziału od A do F włącznie.
Odpowiedzi:
A co z następującymi?
Dopasowuje wyrażenie zaczynające się od 0, po którym następuje mała lub duża litera x, po którym następuje jeden lub więcej znaków z zakresu 0-9, lub af lub AF
źródło
/0x[\da-f]/i
+1.Dokładna składnia zależy od twoich dokładnych wymagań i języka programowania, ale zasadniczo:
lub po prostu
i
sprawia , że wielkość liter nie jest rozróżniana.Jeśli masz szczęście, że używasz Rubiego, możesz:
EDYCJA - odpowiedź Stevena Schroedera uświadomiła mi, że moje rozumienie bitu 0x było błędne, więc odpowiednio zaktualizowałem moje sugestie. Jeśli chcesz również dopasować 0x, odpowiednikami są
DODANO WIĘCEJ - Jeśli 0x musi być opcjonalne (jak sugeruje pytanie):
źródło
Nic wielkiego, ale większość silników regex obsługuje klasy znaków POSIX i jest
[:xdigit:]
do dopasowywania znaków szesnastkowych, co jest prostsze niż zwykłe0-9a-fA-F
rzeczy.Tak więc wyrażenie regularne zgodnie z żądaniem (tj. Z opcją
0x
) to:/(0x)?[[:xdigit:]]+/
źródło
Będzie pasować z lub bez
0x
prefiksu(?:0[xX])?[0-9a-fA-F]+
źródło
Warto wspomnieć, że wykrycie MD5 (co jest jednym z przykładów) można wykonać za pomocą:
źródło
Jeśli używasz Perla lub PHP, możesz zastąpić
z:
źródło
Dla przypomnienia, określiłbym co następuje:
Różni się tym, że sprawdza, czy musi zawierać sześć prawidłowych znaków i małe lub duże litery x, jeśli mamy jeden.
źródło
Jeśli szukasz określonego znaku szesnastkowego w środku ciągu, możesz użyć „\ xhh”, gdzie hh to znak szesnastkowy. Próbowałem i działa. Używam frameworka dla C ++ Qt, ale może rozwiązać problemy w innych przypadkach, w zależności od smaku, którego potrzebujesz (php, javascript, python, golang itp.).
Ta odpowiedź pochodzi z: http://ult-tex.net/info/perl/
źródło
\x
jest odpowiednikiem\u
w innych językach.Dzięki temu masz nie więcej niż trzy prawidłowe pary:
Jakiekolwiek mniej lub więcej niż trzy pary prawidłowych znaków nie pasują.
źródło
W tym przypadku trzeba obrębie wejścia, w którym użytkownik może wpisać
0
, a0x
także, ale nie wiele hex bez0x
prefiksu:źródło
Inny przykład: wartości szesnastkowe dla kolorów css zaczynają się od krzyżyka lub krzyżyka (#), a następnie sześć znaków, które mogą być cyfrą lub literą z przedziału od A do F włącznie.
źródło