正则表达式(php)-匹配非字母数字字符的块


Regular Expressions (php)- match blocks of non alphanumerical charactors

我需要修改给定的字符串,使其仅包含字母数字字符、句点(.)和逗号。如果字符串包含a-z、a-z、0-9或句点(.)以外的任何字符,则应将它们替换为逗号,我使用的是:

$string = "dycloro 987 stackOVERflow !|,!!friday";
$newstring = preg_replace('/[^a-zA-Z0-9'.]/', ',', $string);

此返回,

dycloro,987,stackOVERflow,,,,friday

但我需要得到以下内容。

dycloro,987,stackOVERflow,周五

(请注意,$string中的"!|,!!"部分已替换为单个逗号符号)。理想情况下,我想用一个逗号符号替换一个不允许使用的字符块。我发现了$newstring = preg_replace('/,{2,}/', ',', $newstring);将多个逗号符号替换为一个逗号。但是,有什么方法可以更快或更好地做到这一点吗?如何在单个正则表达式匹配中执行此操作?它们之间是否存在处理时间或内存差异?这是正则表达式将在几兆字节的用户输入下运行,所以我也很好奇。

谢谢!

只需在字符类后面添加一个加号+,意思是"我刚才提到的一个或多个内容"

$string = "dycloro 987 stackOVERflow !|,!!friday";
$newstring = preg_replace('/[^a-zA-Z0-9'.]+/', ',', $string);

请参阅http://www.php.net/manual/en/regexp.reference.repetition.php.

试试这个

$newstring = preg_replace('/[^a-zA-Z0-9'.]+/', ',', $string);