PHP正则表达式,替换所有垃圾符号

时间:2011-05-22 17:16:55

标签: php regex string

对于这样做,我无法理解一个可靠的RegEx,在这个RegEx魔术中仍然是非常新的。我取得了一些有限的成功,但我觉得有一种更简单,更有效的方式。

我想要清除所有非字母数字字符串,并将所有这些无效子集转换为单个下划线,但在边缘处修剪它们。例如,字符串<<+ćThis?//String_..!应转换为This_String

关于在一个RegEx中执行此操作的任何想法?我用普通的str_replace做了它,然后将多次下划线重新排列,然后从边缘修剪掉最后一个下划线,但它看起来有点矫枉过正,就像RegEx一次可以做的那样。这里有最大的速度/效率,即使是我正在处理的毫秒数。

3 个答案:

答案 0 :(得分:6)

= trim(preg_replace('<\W+>', "_", $string), "_");

此处的大写\W转义匹配“非单词”字符,表示除字母和数字之外的所有字符。要删除剩余的外部下划线,我仍然会使用trim

答案 1 :(得分:2)

是的,你可以这样做:

preg_replace("/[^a-zA-Z0-9]+/", "_", $myString);

然后你可以修剪前导和尾随下划线,也许这样做:

preg_replace("/^_+|_+$/", "", $myReplacedString);

这不是一个正则表达式,但它比str_replace和一堆正则表达式更清晰。

答案 2 :(得分:2)

$output = preg_replace('/([^0-9a-z])/i', ' ', '<<+ćThis?//String_..!');
$output = preg_replace('!\s+!', '_', trim($output));
echo $output;
This_String