Regulärer Ausdruck für eine Hexadezimalzahl?


113

Wie erstelle ich einen regulären Ausdruck, der Hexadezimalzahlen in einem Text erkennt?

Zum Beispiel '0x0f4', '0acdadecf822eeff32aca5830e438cb54aa722e3' und '8BADF00D'.


1
Regex analysiert nicht wirklich. Versuchen Sie, alle zahlenähnlichen Dinge zu extrahieren und diejenigen herauszusieben, die keine Hexadezimalzahlen sind.
— Blender

Antworten:


193

Wie wäre es mit folgendem?

0[xX][0-9a-fA-F]+

Entspricht dem Ausdruck, der mit einer 0 beginnt, gefolgt von einem x in Klein- oder Großbuchstaben, gefolgt von einem oder mehreren Zeichen in den Bereichen 0-9 oder af oder AF


35
Das könnte auf /0x[\da-f]/i+1 gekürzt werden , aber ansonsten.
— Niklas B.

20
@ NiklasB. Ihre Kurzschrift ist nur gültig, wenn Sie Perl-Regex verwenden. Wenn Sie POSIX-Regex verwenden, ist die Lösung von Steven die kürzeste. In beiden Fällen funktioniert die Lösung von Steven sowohl für Perl- als auch für POSIX-Regex.
— David M. Syzdek

Verstanden! Die Lösung von Steven ist gut, wenn die Hex-Zahl mit 0x oder 0X beginnt. Dieser sollte besser funktionieren: ^ [0-9A-F] + $ Er kann auch Hex-Muster erkennen wie: '535GH0G73' Für Java können wir zB String.matches () verwenden, um dies zu überprüfen. Vielen Dank für die Antwort :)
— saurcery

2
'0x [\ da-f] {2}' ist wahrscheinlich besser, um auch die Anzahl zu begrenzen
— Yazan Rawashdeh

2
Würde das mit der zweiten und dritten Beispielnummer 0acdadecf822eeff32aca5830e438cb54aa722e3 und 8BADF00D übereinstimmen?
— Peter Mortensen

43

Die genaue Syntax hängt von Ihren genauen Anforderungen und Ihrer Programmiersprache ab, aber im Grunde genommen:

/[0-9a-fA-F]+/

oder einfacher, imacht es unabhängig von Groß- und Kleinschreibung.

/[0-9a-f]+/i

Wenn Sie das Glück haben, Ruby zu verwenden, können Sie Folgendes tun:

/\h+/

BEARBEITEN - Steven Schroeders Antwort hat mir klar gemacht, dass mein Verständnis des 0x-Bits falsch war, deshalb habe ich meine Vorschläge entsprechend aktualisiert. Wenn Sie auch mit 0x übereinstimmen möchten, sind die Äquivalente

/0[xX][0-9a-fA-F]+/
/0x[0-9a-f]+/i
/0x[\h]+/i

MEHR HINZUGEFÜGT - Wenn 0x optional sein muss (wie die Frage impliziert):

/(0x)?[0-9a-f]+/i

Kannst du mir den Grund für die obige RE erklären?
— saurcery

4
@noobDroid Was genau soll ich erklären?
— SimonMayer

18

Keine große Sache, aber die meisten Regex-Engines unterstützen die POSIX-Zeichenklassen, und es gibt [:xdigit:]passende Hex-Zeichen, was einfacher ist als die üblichen 0-9a-fA-FDinge.

Die angeforderte Regex (dh mit optional 0x) lautet also:/(0x)?[[:xdigit:]]+/



11

Es ist erwähnenswert, dass die Erkennung eines MD5 (eines der Beispiele) folgendermaßen erfolgen kann:

[0-9a-fA-F]{32}

5

Wenn Sie Perl oder PHP verwenden, können Sie ersetzen

[0-9a-fA-F]

mit:

[[:xdigit:]]

Dies sollte eine in sich geschlossene Antwort sein.
— Peter Mortensen

3

Nur für die Aufzeichnung würde ich Folgendes spezifizieren:

/^[xX]?[0-9a-fA-F]{6}$/

Was in unterscheidet , dass es überprüft, ob sie hat die sechs gültige Zeichen enthalten und auf Klein- oder Groß x , falls wir eine haben.


2

Wenn Sie nach einem bestimmten Hex-Zeichen in der Mitte der Zeichenfolge suchen, können Sie "\ xhh" verwenden, wobei hh das hexadezimale Zeichen ist. Ich habe es versucht und es funktioniert. Ich verwende Framework für C ++ Qt, aber es kann Probleme in anderen Fällen lösen, abhängig von der Art, die Sie verwenden müssen (PHP, Javascript, Python, Golang usw.).

Diese Antwort stammt von: http://ult-tex.net/info/perl/


Hallo! Während dies für Perl zutrifft, scheint dies bei regulären Ausdrücken nicht in allen Programmiersprachen der Fall zu sein. Nach diesem \x ist das Äquivalent zu \uin anderen Sprachen.
— Maurice

Was ist "especific anda"?
— Peter Mortensen

0

Dieser stellt sicher, dass Sie nicht mehr als drei gültige Paare haben:

(([a-fA-F]|[0-9]){2}){3}

Mehr oder weniger als drei Paare gültiger Zeichen stimmen nicht überein.


0

Für den Fall , müssen Sie dies in einem Eingang , an dem der Benutzer eingeben kann 0und 0xauch , aber nicht eine Hex - Zahl ohne 0xPräfix:

^0?[xX]?[0-9a-fA-F]*$

0

Ein weiteres Beispiel: Hexadezimalwerte für CSS-Farben beginnen mit einem Nummernzeichen oder einem Hash (#), dann mit sechs Zeichen, die entweder eine Ziffer oder ein Buchstabe zwischen A und F sein können.

^#[0-9a-fA-F]{6}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.