对于这样做,我无法理解一个可靠的RegEx,在这个RegEx魔术中仍然是非常新的。我取得了一些有限的成功,但我觉得有一种更简单,更有效的方式。
我想要清除所有非字母数字字符串,并将所有这些无效子集转换为单个下划线,但在边缘处修剪它们。例如,字符串<<+ćThis?//String_..!
应转换为This_String
关于在一个RegEx中执行此操作的任何想法?我用普通的str_replace做了它,然后将多次下划线重新排列,然后从边缘修剪掉最后一个下划线,但它看起来有点矫枉过正,就像RegEx一次可以做的那样。这里有最大的速度/效率,即使是我正在处理的毫秒数。
答案 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