代码之家  ›  专栏  ›  技术社区  ›  learner

将出现的多个特殊字符替换为除

  •  1
  • learner  · 技术社区  · 9 年前

    我需要替换:

    1. 所有连续出现的特殊字符。
    2. 我需要排除 . .

    例如

    $about = "   .....I......####    ";
    

    应该成为

    $about = " .....I......# ";
    

    我写了一个正则表达式:

    $about = preg_replace("/[^\w^.]{2,}/","$1",$about);
    

    但它不起作用。我如何才能做到这一点?

    1 回复  |  直到 9 年前
        1
  •  2
  •   Wiktor Stribiżew    9 年前

    你的模式 [^\w^.]{2,} 匹配除字以外的字符的任何2次或多次出现, ^ . .

    要匹配除单词和点以外的连续相同字符,请执行以下操作: 或者,您可以使用

    ([^\w.])\1+
    

    并替换为: $1 .

    regex demo .

    细节 :

    • ([^\w.]) -匹配并捕获组1中的字符,而不是单词字符和点
    • \1+ -匹配组1中捕获的值的一次或多次出现。

    PHP demo :

    $re = '/([^\w.])\1+/';
    $str = '   .....I......####    ';
    $subst = '$1';
    $result = preg_replace($re, $subst, $str);
    echo "The result of the substitution is '".$result . "'";