为什么这个preg_replace不起作用?
仅供参考,我将PHP脚本设置为UTF8而没有BOM,我将此处的功能设置为删除模式的所有匹配(而不是我将实际执行的操作,这是删除所有不匹配)因为这更容易用于检测。另请注意,ā
字符不在我的正则表达式中,因此这应该是留下的唯一字符。
$string='The Story of Jewād';
echo preg_replace('@([!"#$&’\(\)\*\+,\-\./0123456789:;<=>\?ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_‘abcdefghijklmnopqrstuvwxyz\{\|\}~¡¢£⁄¥ƒ§¤“«‹›fifl–†‡·¶•‚„”»…‰¿`´ˆ˜¯˘˙¨˚¸˝˛ˇ—ƪŁØŒºæıłøœß÷¾¼¹×®Þ¦Ð½−çð±Çþ©¬²³™°µ ÁÂÄÀÅÃÉÊËÈÍÎÏÌÑÓÔÖÒÕŠÚÛÜÙÝŸŽáâäàåãéêëèíîïìñóôöòõšúûüùýÿž€\'])@u','',$string);
我得到的结果是$ string不变。为什么会这样?
答案 0 :(得分:3)
这反过来:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
<?php
$string='The Story of Jewād';
echo preg_replace('@([ā])@','',$string);
?>
所以,某处只存在语法问题...... 将所有字符列为RegExp并不是一个好主意。你可以做类似这样的列表:
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';