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
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):
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:]]+/
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.).
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.
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.
Antworten:
Wie wäre es mit folgendem?
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
quelle
/0x[\da-f]/i
+1 gekürzt werden , aber ansonsten.Die genaue Syntax hängt von Ihren genauen Anforderungen und Ihrer Programmiersprache ab, aber im Grunde genommen:
oder einfacher,
i
macht es unabhängig von Groß- und Kleinschreibung.Wenn Sie das Glück haben, Ruby zu verwenden, können Sie Folgendes tun:
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
MEHR HINZUGEFÜGT - Wenn 0x optional sein muss (wie die Frage impliziert):
quelle
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 üblichen0-9a-fA-F
Dinge.Die angeforderte Regex (dh mit optional
0x
) lautet also:/(0x)?[[:xdigit:]]+/
quelle
Dies wird mit oder ohne
0x
Präfix übereinstimmen(?:0[xX])?[0-9a-fA-F]+
quelle
Es ist erwähnenswert, dass die Erkennung eines MD5 (eines der Beispiele) folgendermaßen erfolgen kann:
quelle
Wenn Sie Perl oder PHP verwenden, können Sie ersetzen
mit:
quelle
Nur für die Aufzeichnung würde ich Folgendes spezifizieren:
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.
quelle
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/
quelle
\x
ist das Äquivalent zu\u
in anderen Sprachen.Dieser stellt sicher, dass Sie nicht mehr als drei gültige Paare haben:
Mehr oder weniger als drei Paare gültiger Zeichen stimmen nicht überein.
quelle
Für den Fall , müssen Sie dies in einem Eingang , an dem der Benutzer eingeben kann
0
und0x
auch , aber nicht eine Hex - Zahl ohne0x
Präfix:quelle
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.
quelle