我正在从一个SO answer修改GM-7设置-它是为Javascript编写的,但我正在修改它以与preg一起工作。
我添加了一个分隔符~,\x{XXXX},并在末尾添加了u。我还在开始括号^之后添加了[,这样preg_replace就可以用空格替换任何不是GSM-7字符的字符。
我的问题是,preg_match正确地返回了false,但是preg_replace并没有替换任何东西。
我遗漏了什么?我尝试过在~后面和前面添加括号,但这似乎没有起到任何作用。
下面的代码只显示了乱码的文本,而不是被preg_replace替换为空白的部分。
编辑:,我也尝试过$gsmchars = '~^[^A-Za-z0-9]*$~u';,preg_replace也做过同样的事情--什么也不做。我在我的领地上错过了什么选择?
$gsmchars = '~^[^A-Za-z0-9 \\r\\n@£$¥èéùìòÇØøÅå\x{0394}_\x{03A6}\x{0393}\x{039B}\x{03A9}\x{03A0}\x{03A8}\x{03A3}\x{0398}\x{039E}ÆæßÉ!\"#$%&\'\(\)*+,\\-./:;<=>?¡ÄÖÑܧ¿äöñüà^{}\\\\\\[\~\\]|\x{20AC}]*$~u';
$string = 'ab€m²cdefلg123$';
$match = preg_match($gsmchars, $string);
if ($match === false) {
die("ERROR");
} else if (!$match) {
$replace = preg_replace($gsmchars, '', $string);
//Now that it's in UTF-8, replace the non-GSM chars
die($replace . "A");
} else {
die('match');
}发布于 2014-07-02 19:17:37
试试这个:
$gsmchars = '~[^A-Za-z0-9 \r\n@£$¥èéùìòÇØøÅå\x{0394}_\x{03A6}\x{0393}\x{039B}\x{03A9}\x{03A0}\x{03A8}\x{03A3}\x{0398}\x{039E}ÆæßÉ!\"#$%&\'\(\)*+,\-.\/:;<=>;?¡ÄÖÑܧ¿äöñüà^{}\[\~\]\|\x{20AC}\\]~u'; // added backslash
$string = 'ab€m²cdefلg123$';
echo preg_replace($gsmchars, '', $string);
$match = preg_match($gsmchars, $string);
if ($match === false) {
die("ERROR");
} else if ($match) {
$replace = preg_replace($gsmchars, '', $string);
//Now that it's in UTF-8, replace the non-GSM chars
die($replace . "A");
} else {
die('match');
}这个站点确实帮助调试正则表达式:
http://regex101.com当if-else是一个匹配的时,您还需要更改您的以继续进行。
https://stackoverflow.com/questions/24537808
复制相似问题