Javaで正規表現を使用する際にいくつか問題があります。私はISOファイルを検索しようとしていて、そこにJPGイメージがあればそれを切り出します。JPGカービングのJava正規表現
Pattern imageRegex = Pattern.compile("\\x45\\x78\\x69\\x66"); //Exif regex
これは正常に動作し、私はその後、EXIF情報を切り開く提出することができます:現時点では
は、私は、次の正規表現を使用して、JPG内EXIF情報を見つけると成功を抱えています。私は、この正規表現を使用する場合
しかし、:
Pattern imageRegex = Pattern.compile("\\xff\\xd8\\xff"); //JPG header regex
Javaは任意のマッチを見つけることができません。 ISOファイル内にJPGが存在することを確認できます。
私は一度に200バイトのファイルをバイト配列に読み込み、それを正規表現になるように文字列に変換しています。
これはちょっと混乱しているように、これがなぜ起こっているのか誰にでも助言できますか?
また、Javaで正規表現を使用してJPGを彫刻するファイルの問題に近づくには、誰も助けてください。
アドバイスをいただければ幸いです。
感謝。 exifデータがすべての有効なASCII文字であるため、どのように一致しているのか理解しています。 私が理解しづらいのは、単純に一連のバイトを照合することなく、JPGヘッダーと一致させるためにバイト[]などを使用する方法です。 私はfileinputstream APIを見てきましたが、まだ少し混乱しています。 バイトをどのように一致させるかについて、より良いソリューションを提供できますか? 私は単に答えを私に渡すことを望んでいませんが、私はこれに新しいです、そして、私は急速にますます混乱しています。 – user848044
最も簡単な方法は、0xff' 'を探しているバイト配列を通じてだけループするだろう おかげ - あなたがものを見つけたときには、それはそれに続く' 0xd8'と '0xff'が続いていますかどうかを確認します。このプロセスを最適化する方法(Boyer-Mooreアルゴリズムなど)がありますが、簡単なアプローチは初心者にとってはうまくいくでしょう。 – duskwuff