2

を使用して、文字列から有効な文字とヘブライ語の Unicode 文字のみを維持しようとしていますpreg_replace

次の文字列でエラーが発生します。

$PLAINText1 = preg_replace('/[^(\x20-\x7F),(\x05D0-\x05F2)]*/','', $PLAINText);

エラーは次のとおりです。

コンパイルに失敗しました: オフセット 25 インチの文字クラスの範囲が正しくありません....

エラーがこのフレーズにのみあることは既に知っています:(\x05D0-\x05F2)

ここでこの問題に関する多くの投稿を読みましたが、解決策が見つかりませんでした。関連する投稿の 1 つは、Unicode に } を追加することを提案したため、この文字列では次のようになります。

$PLAINText1 = preg_replace('/[^(\x20-\x7F),(\x{05D0}-\x{05F2})]*/','', $PLAINText);

別のエラーが発生しています:

\x{...}オフセット 22 では、シーケンス内の文字値が大きすぎます ...

助けてください。

4

4 に答える 4

3

\x2桁の16進数のみを受け入れるため、範囲は「ENQ文字、D、0とENQの間の任意のもの(これはエラーです)、Fまたは2」に変換されます

u正規表現の最後にUnicode 修飾子を追加してみてください\x{05D0}。使用して、16 進数として使用する文字数を明示的に伝えます。

于 2013-06-12T15:32:09.493 に答える
1

余談ですが、有効なヘブライ文字を次\p{Hebrew}のように使用できます。\P{Hebrew}

于 2013-06-12T18:27:02.550 に答える
0

たとえば、ファイルを utf 8 エンコーディングに変更する必要がありますpreg_replace('/[^\p{Hebrew}a-zA-Z0-9_ %[].()&-]/u','', $q)

于 2015-01-06T12:32:29.957 に答える