我需要修改给定的字符串以仅包含字母数字字符,点(。)和逗号。 如果字符串包含除a-z,A-Z,0-9或点(。)以外的任何字符,则应使用逗号分隔,我使用此字符:
$string = "dycloro 987 stackOVERflow !|,!!friday";
$newstring = preg_replace('/[^a-zA-Z0-9\.]/', ',', $string);
返回
dycloro,987,计算器,,,,,,星期五
但我需要得到以下内容。
dycloro,987,计算器,星期五
(注意$ string中的“!|,!!”部分将替换为单个逗号符号)。
理想情况下,我想用一个逗号来替换一个不允许的字符块。
我想通了
$newstring = preg_replace('/,{2,}/', ',', $newstring);
用一个逗号替换多个逗号。但有没有办法以更快或更好的方式做到这一点?
如何在单个正则表达式匹配中执行此操作?
它们中是否有任何处理时间或内存差异?这是正则表达式将针对几兆字节的用户输入运行,所以我也很好奇。
谢谢!
答案 0 :(得分:2)
在字符类之后添加一个加号+
,意思是"我刚提到的一个或多个":
$string = "dycloro 987 stackOVERflow !|,!!friday";
$newstring = preg_replace('/[^a-zA-Z0-9\.]+/', ',', $string);
请参阅http://www.php.net/manual/en/regexp.reference.repetition.php。
答案 1 :(得分:2)
试试这个
$newstring = preg_replace('/[^a-zA-Z0-9\.]+/', ',', $string);