好的,我希望有人可以用一点正则表达式来帮助我。
我正在尝试清理字符串。
基本上,我是:
用替换替换除 A-Za-z0-9 之外的所有字符。
用单个替换实例替换替换的连续副本。
从字符串的开头和结尾修剪替换。
示例输入:
( && (%()$( )#& #&%&% %(%$ +-_狗跳过原木*(&)$%& )#)@#%&)&^)@# )
所需输出:
The+dog+jumped+over+the+log
我目前正在使用这个非常混乱的代码,并且只知道有一种更优雅的方式来完成这个......
function clean($string, $replace){
$ok = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
$ok .= $replace;
$pattern = "/[^".preg_quote($ok, "/")."]/";
return trim(preg_replace('/'.preg_quote($replace.$replace).'+/', $replace, preg_replace($pattern, $replace, $string)),$replace);
}
Regex-Fu 大师能否为我提供更简单/更有效的解决方案?
Botond Balázs 和 hakre 提出并解释了一个更好的解决方案:
function clean($string, $replace, $skip=""){
// Escape $skip
$escaped = preg_quote($replace.$skip, "/");
// Regex pattern
// Replace all consecutive occurrences of "Not OK"
// characters with the replacement
$pattern = '/[^A-Za-z0-9'.$escaped.']+/';
// Execute the regex
$result = preg_replace($pattern, $replace, $string);
// Trim and return the result
return trim($result, $replace);
}