0

この正規表現は、ASCII以外のすべての文字、0〜128のコードポイントに一致することになっています。

 /[^x00-x7F]/i

この正規表現をすべてのUnicode文字、0-1114111コードポイントでテストしたいとします(好奇心から)。

この範囲の生成は、おそらく簡単range(0, 1114111)です。次に、関数を使用して各10進数を16進数に変換する必要がありdechex()ます。

その後、16進数を実際の文字に変換するにはどうすればよいですか?また、ASCIIスキームにすでに含まれている文字をどのように除外できますか?

4

2 に答える 2

0

hex2bin(string)関数は、16 進文字列をバイナリ文字列に変換すると思います。ASCII 文字コードポイントを除外するには、x80 16 進コードポイントから開始します (x00 をスキップして x7F にします)。

しかし、正規表現ライブラリを単体テストしようとしているように聞こえます。これは、正規表現ライブラリを開発している場合や、非常に偏執的である必要がある場合を除き、不要なようです。

于 2012-09-20T18:08:44.577 に答える
0

マッチングをどのように行うか、および修飾子を使用して PCRE 正規表現エンジンをUTF-8 モードにするかどうかによって異なります。/u

修飾子を使用する場合/u、まず、正規表現とサブジェクトの両方に UTF-8 エンコーディングを使用する必要があります。正規表現エンジンは、正当な UTF-8 バイト シーケンスを 1 文字として自動的に解釈します。このモードでは、正規表現は、コード ポイントが 255 を超える文字を含め、 Latin-1 補足[^x00-x7F]ブロックの外側にあるすべての文字と一致します。また、各文字の UTF-8 表現を (コード ポイントを指定して)手動で生成する必要があります。

修飾子を使用しない場合、正規表現エンジンは機能しなくなります。つまり、各バイト/uを個別の文字と見なすため、文字レベルではなくバイト単位で作業する必要があります。一方、好みのエンコーディングを使用できるようになりました。ただし、正規表現を捨てて(文字列内のランダムなバイトにのみ一致するため)、選択したエンコーディングのルールを具体化する正規表現を使用する必要があります(例 UTF-8)。ランダムな文字のエンコードされた形式を生成するには、特定のエンコードに依存するカスタム コードを使用する必要があります。[^x00-x7F]

于 2012-09-20T17:38:32.357 に答える