Come si crea un'espressione regolare che rileva i numeri esadecimali in un testo?
Ad esempio, "0x0f4", "0acdadecf822eeff32aca5830e438cb54aa722e3" e "8BADF00D".
Come si crea un'espressione regolare che rileva i numeri esadecimali in un testo?
Ad esempio, "0x0f4", "0acdadecf822eeff32aca5830e438cb54aa722e3" e "8BADF00D".
Risposte:
Che ne dici di quanto segue?
0[xX][0-9a-fA-F]+
Corrisponde all'espressione che inizia con uno 0, seguita da una x minuscola o maiuscola, seguita da uno o più caratteri negli intervalli 0-9, o af o AF
/0x[\da-f]/i, ma in caso contrario, +1.
La sintassi esatta dipende dai tuoi requisiti esatti e dal linguaggio di programmazione, ma fondamentalmente:
/[0-9a-fA-F]+/
o più semplicemente, lo irende insensibile al maiuscolo / minuscolo.
/[0-9a-f]+/i
Se sei abbastanza fortunato da usare Ruby, puoi fare:
/\h+/
EDIT - La risposta di Steven Schroeder mi ha fatto capire che la mia comprensione del bit 0x era sbagliata, quindi ho aggiornato i miei suggerimenti di conseguenza. Se vuoi anche trovare 0x, gli equivalenti sono
/0[xX][0-9a-fA-F]+/
/0x[0-9a-f]+/i
/0x[\h]+/i
AGGIUNTO ALTRO - Se 0x deve essere facoltativo (come implica la domanda):
/(0x)?[0-9a-f]+/i
Non è un grosso problema, ma la maggior parte dei motori regex supporta le classi di caratteri POSIX, e c'è [:xdigit:]per la corrispondenza dei caratteri esadecimali, che è più semplice delle 0-9a-fA-Fcose comuni .
Quindi, la regex richiesta (cioè con facoltativo 0x) è:/(0x)?[[:xdigit:]]+/
Questo corrisponderà con o senza 0xprefisso
(?:0[xX])?[0-9a-fA-F]+
Vale la pena ricordare che il rilevamento di un MD5 (che è uno degli esempi) può essere eseguito con:
[0-9a-fA-F]{32}
Se stai usando Perl o PHP, puoi sostituire
[0-9a-fA-F]
con:
[[:xdigit:]]
Se stai cercando un carattere esadecimale specifico nel mezzo della stringa, puoi usare "\ xhh" dove hh è il carattere in esadecimale. Ho provato e funziona. Uso framework per C ++ Qt ma può risolvere problemi in altri casi, dipende dal gusto che devi usare (php, javascript, python, golang, ecc.).
Questa risposta è stata presa da: http://ult-tex.net/info/perl/
Questo ti assicura di non avere più di tre coppie valide:
(([a-fA-F]|[0-9]){2}){3}
Eventuali più o meno di tre coppie di caratteri validi non corrispondono.
Nel caso in cui sia necessario all'interno di un input in cui l'utente può digitare 0e 0xanche ma non un numero esadecimale senza il 0xprefisso:
^0?[xX]?[0-9a-fA-F]*$
Un altro esempio: i valori esadecimali per i colori CSS iniziano con un cancelletto o un cancelletto (#), quindi sei caratteri che possono essere un numero o una lettera tra A e F inclusi.
^#[0-9a-fA-F]{6}