1

このpreg_replaceが機能しないのはなぜですか?

参考までに、PHPスクリプトをBOMなしのUTF8に設定し、テストが簡単なため、パターンのすべての一致を削除するように設定しました(実際に実行するのではなく、すべての不一致を削除します)。キャラクターが私の正規表現に含まれていないことにも注意してください。したがって、これが残された唯一のキャラクターである必要があります。

$string='The Story of Jewād';
echo preg_replace('@([!"#$&’\(\)\*\+,\-\./0123456789:;<=>\?ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_‘abcdefghijklmnopqrstuvwxyz\{\|\}~¡¢£⁄¥ƒ§¤“«‹›fifl–†‡·¶•‚„”»…‰¿`´ˆ˜¯˘˙¨˚¸˝˛ˇ—ÆªŁØŒºæıłøœß÷¾¼¹×®Þ¦Ð½−çð±Çþ©¬²³™°µ ÁÂÄÀÅÃÉÊËÈÍÎÏÌÑÓÔÖÒÕŠÚÛÜÙÝŸŽáâäàåãéêëèíîïìñóôöòõšúûüùýÿž€\'])@u','',$string);

私が得る結果は変更されていない$stringです。なぜこれでしょうか?

4

1 に答える 1

3

これは逆に機能します:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
<?php 

$string='The Story of Jewād';
echo preg_replace('@([ā])@','',$string);

?>

したがって、どこかに構文上の問題があります...これは、すべての文字を正規表現としてリストすることはお勧めできません。次のようなリストを作成できます。

ltrChars : 'A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02B8\u0300-\u0590\u0800-\u1FFF'+'\u2C00-\uFB1C\uFDFE-\uFE6F\uFEFD-\uFFFF';
rtlChars : '\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC';
于 2013-03-16T16:08:51.213 に答える