我想删除字符串中的任何类型的特殊字符,如下所示:
This is, ,,, *&% a ::; demo + String. +
Need to**@!/// format:::::
!!! this.`
输出要求:
This is a demo String Need to format this
如何使用正则表达式做到这一点?
检查非数字、非字母字符的任何重复实例并用空格重复:
# string(41) "This is a demo String Need to format this"
$str = trim( preg_replace( "/[^0-9a-z]+/i", " ", $str ) );
演示:http ://codepad.org/hXu6skTc
/ # 表示模式的开始 [ # 表示字符类的开始 ^ # 不是,或否定 0-9 # 数字 0 到 9(或者,“不是数字”,因为 ^ az # 字母 a 到 z(或者,“不是字母或数字”,因为 ^0-9 ] # 表示字符类结束 + # 匹配字符类匹配的 1 个或多个实例 /# 表示模式结束 i # 不区分大小写,az 也表示 AZ
采用:
preg_replace('#[^a-zA-Z0-9 ]#', '', $yourString);
如果字符不是字母、数字或空格,则将其替换为空字符串。
例子:
$yourString = 'This is, ,,, *&% a ::; demo + String. + Need to**@!/// format::::: !!! this.`';
$newStr = preg_replace('#[^a-zA-Z0-9 ]#', '', $yourString);
echo $newStr;
结果:
This is a demo String Need to format this
因此,如果您愿意,可以通过将它们放入:
[^a-zA-Z0-9 ]
注意:此外,如果您不想在单词之间允许多个空格(尽管在浏览器中输出时不会显示它们),您需要使用它来代替:
preg_replace('#[^a-zA-Z0-9]+#', ' ', $yourString);
$string = preg_replace('/[^a-z]+/i', ' ', $string);
您可能还希望'
在您的角色类中允许有连词,例如don't
not be rolling into don t
:
$string = preg_replace('/[^a-z\']+/i', ' ', $string);
您可能还想在之后修剪它以删除前导和尾随空格:
$string = trim(preg_replace('/[^a-z\']+/i', ' ', $string));
echo preg_replace('/[^a-z]+/i', ' ', $str);
// This is a demo String Need to format this