gpt4 book ai didi

php - PHP 中更高效的字符串清理正则表达式

转载 作者:可可西里 更新时间:2023-11-01 01:04:56 26 4
gpt4 key购买 nike

好的,我希望有人能帮助我了解一些正则表达式。

我正在尝试清理一个字符串。

基本上,我是:

  1. 用替换字符替换除 A-Za-z0-9 之外的所有字符。

  2. 用单个替换实例替换连续重复的替换。

  3. 从字符串的开头和结尾修剪替换。

示例输入:

(&&(%()$()#&#&%&%%(%$+-_狗跳过去了日志*(&)$%&)#)@#%&)&^)@#)

要求的输出:

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 Master 能给我一个更简单/更有效的解决方案吗?


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);
}

最佳答案

我不是“正则表达式忍者”,但我会这样做。

function clean($string, $replace){
/// Remove all "not OK" characters from the beginning and the end:
$result = preg_replace('/^[^A-Za-z0-9]+/', '', $string);
$result = preg_replace('/[^A-Za-z0-9]+$/', '', $result);

// Replace all consecutive occurrences of "not OK"
// characters with the replacement:
$result = preg_replace('/[^A-Za-z0-9]+/', $replace, $result);

return $result;
}

我想这可以进一步简化,但在处理正则表达式时,清晰度和可读性通常比聪明或编写 super 优化的代码更重要。

让我们看看它是如何工作的:

  • /^[^A-Za-z0-9]+/:
    • ^ 匹配字符串的开头。
    • [^A-Za-z0-9] 匹配所有字母数字字符
    • +表示“匹配前面的一个或多个”
  • /[^A-Za-z0-9]+$/:
    • 与上面相同,除了 $ 匹配字符串的结尾
  • /[^A-Za-z0-9]+/:
    • 和上面一样,除了它也匹配中间字符串

编辑: OP 是正确的,前两个可以替换为对 trim() 的调用:

function clean($string, $replace){
// Replace all consecutive occurrences of "not OK"
// characters with the replacement:
$result = preg_replace('/[^A-Za-z0-9]+/', $replace, $result);

return trim($result, $replace);
}

关于php - PHP 中更高效的字符串清理正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13439294/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com