私はいくつかのアドバイスを使うことができます - PHPでバイナリファイルを解析しています。具体的にはSega Genesisのrom-fileです。私が作った表によれば、特定のバイトは文字に対応しているか、ゲームのテキストエンジンで異なるものを制御しています。PHPでバイナリファイルのバイトを解析し、グループをプレースホルダに変換する
あり改行、条件、色や他の原料の束のための文字だけでなく、「コントローラ」-bytesのために使用されたバイトが、あるので、定型文は、おそらく次のようになります。
FC 03 E7 05 D3 42 79 20 64 6F 69 6E 67 20 73 6F 2C BC BE 08 79 6F 75 20 6A 75 73 74 20 61 63 71 75 69 72 65 64 BC BE 04 61 20 74 65 73 74 61 6D 65 6E 74 20 74 6F 20 79 6F 75 72 BC 73 74 61 74 75 73 20 61 73 20 61 20 77 61 72 72 69 72 21 6F BD私は翻訳できBC
:
<FC><03><E7><05><D3>By doing so,<NL><BE><08>you just acquired<NL><BE><04>a testament to your<NL>status as a warrior!<CURSOR>
私は..
を参照してください、 文字に変換バイト(7F 00)や改行を(例えば長さなどのコントローラーバイト文字列のプロパティを指定して特定の位置に自分自身の値を書きたいですBC)は1バイトのみで構成され、その他は2(BE XX)で構成されます。
は、私は、このようなバイトを認識し、私を聞かせて私のパーサをしたい(XとYは、私は一緒に私の翻訳された文字列を入れながら計算する必要があるオフセットを参照してください) FC XX YY:条件(FC)はさえ5バイトで構成しますXX YYを動的に書きます。 strtrを使用して、私は "グループ"を置き換えることができます。私は静的なバイトコードを配列に入れます。
パーサーをフレキシブルに保ちながら、これをどのように行いますか? ありがとう!
この[FC(\ w \ w){4} | BE(\ w \ w)|(\ w \ w) '](https://regex101.com/r/kR9kdP/1)は機能しますか? ?これはあなたが言及した3つのルール、FC + 4バイトまたはBE + 1バイトまたはただ1バイトを含む – degant
私は正規表現のが良くないですが、私はあなたの式をpreg_matchで使用して、エラーが出ました:preg_match():区切り文字は、英数字またはバックスラッシュであってはなりません。 – Alex
最初にデモをチェックしてください:https://regex101.com/r/kR9kdP/1これがあなたが探しているものか、マッチが正しく機能しているかどうかを確認してください。このようにしてみることができます:https://regex101.com/r/kR9kdP/1/codegen?language=php – degant