私が持っているのは、16 進数を表す入力文字列です。
E3E4E5E64E
正規表現を使用して、この 16 進文字列で表される数値に特定の 16 バイトが存在するかどうかをテストしたいと思います4E
。
単純に を一致させようとすると、文字列の末尾にある4E
正しいバイトと、バイトを形成しない間違ったバイトの両方にヒットしていますが、単に の最後の桁
と の最初の桁です。4E
4E
E4
E5
文字のペアを操作する正規表現を書くことは可能ですか?
/([A-Fa-f0-9]{2})/g
私はあなたが2つの16進文字ごとに欲しいと推測しています。
http://www.regex101.com/r/nO5qL2
編集:
わかりました。あなたが何を望んでいるのか理解できました。最後に 4E を一致させたいのですが、E4E5 から 4E のようなオカレンスは必要ありません。ここにあります:
/^([A-Fa-f0-9]{2})*(4E)/
最初のグループは 0、2、4、.. 2n 文字に一致し、次に 4E グループに一致します (4E がグループである必要はありませんが、抽出する方が簡単です)。例:
http://www.regex101.com/r/iQ7uX4
もちろん、4E は任意のものに置き換えることができます。Java RegExp では、RegExp の最後に .* が必要になる場合があります。今はテストできません。
正規表現はかなり限られています。彼らは文脈を「理解」できません。
詳細については、以下を参照してください。
4E
そのため、標準の正規表現では、2 つの 16 進数E4E5
と 16 進数の byte を形成する 1つを区別することはできません4E
。
ただし、正規表現のみに依存することを強制するものは何もありません! たとえば、文字列に 16 進文字列のみが含まれていることがわかっている場合は、偶数の位置インデックスで始まる正規表現から生じる一致のみを受け入れることができます。