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);

?>

所以,只是某处存在语法问题......将所有字符列为 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';
于 2013-03-16T16:08:51.213 回答