用除以外的一个替换多个特殊字符

时间:2016-10-10 12:24:28

标签: php regex

我需要替换:

  1. 单次出现的所有连续特殊字符。
  2. 我需要排除$about = " .....I......#### ";
  3. e.g。

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

    应该成为

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

    我写了一个正则表达式:

    axis off; 
    

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

1 个答案:

答案 0 :(得分:2)

您的模式[^\w^.]{2,}匹配除了^.之外的其他两个或多个字符。

要匹配除字和点以外的连续相同字符,您可以使用

([^\w.])\1+

并替换为$1

请参阅regex demo

详细

  • ([^\w.]) - 匹配并捕获第1组中除字char和点
  • 之外的字符
  • \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 . "'";