[解決済み] 修飾子/u
を正規表現に追加すると、この問題が解決されます。コメントの MI の功績:)
次のコードを検討してください。
var_dump('Trimiteţi');
preg_match('/^([\p{L}]+)/', 'Trimiteţi', $matches);
print_r($matches);
を使用して非ラテン文字を含む可能性のある単語をフィルタリングするために使用しています。また、末尾の文字列の正規表現記号を\p{L}
使用していないことにも注意してください$
preg_match
問題は、コードをローカルで実行すると、次の出力が表示されることです。
string 'Trimiteţi' (length=10)
Array ( [0] => TrimiteÅ [1] => TrimiteÅ )
PHPサンドボックスでコードを実行してみましたが、同様のものが出力されます。
string(10) "Trimiteţi"
Array
(
[0] => Trimite�
[1] => Trimite�
)
少なくとも今回は元のvar_dump
単語を台無しにしていないことに注意してください。
何が起こっている?preg_match を使用すると単語が変わるのはなぜですか? $
これに関する最悪の部分は、正規表現の最後に追加すると、 NOT MATCHになります。これらの変換されたシンボルは、文字列の末尾などとして解釈できなかったと思われるためです。私を助けてください
編集: 私が実行しているファイル エンコーディングは "text/x-php; charset=utf-8" に設定されています
Edit2: さらに、regex101.comを使用し、正規表現"^[\p{L}] を使用する場合+$」と「Trimiteţi」という単語が一致しているようです。正規表現を "^([\p{L}]+)$" に切り替えて、キャプチャ グループとサイト出力を追加することもできます。
MATCH 1
1. [0-9] `Trimiteţi`