16進数の正規表現?


113

テキスト内の16進数を検出する正規表現を作成するにはどうすればよいですか?

たとえば、「0x0f4」、「0acdadecf822eeff32aca5830e438cb54aa722e3」、「8BADF00D」などです。


1
正規表現は実際には解析しません。すべての数字のようなものを抽出して、16進数でないものを選別してみてください。
Blender、2012

回答:


193

次はどうですか?

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

0で始まり、その後に小文字または大文字のxが続き、その後に0〜9、またはaf、またはAFの範囲の1つ以上の文字が続く式に一致します。


35
これはに短縮できます/0x[\da-f]/iが、それ以外の場合は+1になります。
Niklas B.12年

20
@NiklasB。省略表現は、perl regexを使用している場合にのみ有効です。POSIXregexを使用している場合は、Stevenのソリューションが最も短くなります。どちらの方法でも、StevenのソリューションはperlとPOSIXの両方の正規表現で機能します。
David M. Syzdek

とった!16進数が0xまたは0Xで始まる場合、Stevenによる解決策が適しています。これはよりよく機能するはずです:^ [0-9A-F] + $また、次のような16進数パターンも認識できます: '535GH0G73' Javaの場合、これをチェックするために、たとえば、String.matches()を使用できます。 :)
ソーサリー

2
'0x [\ da-f] {2}'も適切に数を制限する方が良い
Yazan Rawashdeh

2
2番目と3番目の例の番号0acdadecf822eeff32aca5830e438cb54aa722e3および8BADF00Dと一致しますか?
Peter Mortensen

43

正確な構文は、正確な要件とプログラミング言語によって異なりますが、基本的には次のとおりです。

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

より簡単に言えば、i大文字と小文字を区別しません。

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

Rubyを使用できるほど幸運であれば、次のことができます。

/\h+/

編集 -スティーブンシュローダーの回答により、0xビットの理解が間違っていたことがわかり、それに応じて提案を更新しました。0xにも一致させる場合、同等のものは

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

追加-0xをオプションにする必要がある場合(質問が意味するように):

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

上記のREの理由を教えてください。
ソーサリー

4
@noobDroid具体的に何を説明して欲しいですか?
SimonMayer

18

大したことではありませんが、ほとんどの正規表現エンジンはPOSIX文字クラスをサポートして[:xdigit:]おり、一般的な0-9a-fA-Fものよりも簡単な16進文字の照合が可能です。

したがって、要求された(つまり、オプションの0x)正規表現は次のとおりです。/(0x)?[[:xdigit:]]+/



11

MD5の検出(例の1つ)は、次の方法で実行できることに言及する価値があります。

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


3

念のため、次のように指定します。

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

これは、6つの有効な文字が含まれている必要があること、および1つある場合は小文字または大文字のxが含まれていることを確認する点が異なります。


2

文字列の途中で特定の16進文字を探している場合は、「\ xhh」を使用できます。hhは16進数の文字です。私が試したところ、うまくいきました。私はC ++ Qtのフレームワークを使用していますが、使用する必要のあるフレーバー(php、javascript、python、golangなど)によっては、他の場合でも問題を解決できます。

この回答は、http//ult-tex.net/info/perl/から取得されました。


おい!これはperlに当てはまるかもしれませんが、すべてのプログラミング言語の正規表現に当てはまるとは限りません。よると、この \xと等価である\u他の言語インチ
モーリス

「especific anda」とは何ですか?
Peter Mortensen 2017

0

これにより、有効なペアは3つ以下になります。

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

3つ以上の有効な文字のペアは一致しません。



0

別の例:cssの色の16進値は、ポンド記号またはハッシュ(#)で始まり、次に数字またはAとFの間の文字のいずれかである6文字。

^#[0-9a-fA-F]{6}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.