2016-10-10 33 views
1

我需要更换:替换多个特殊字符次数与一个除了

  1. 所有连续的特殊字符,它的单个事件。
  2. 我需要排除.

例如

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

应该成为

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

我写了一个正则表达式:

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

,但它无法正常工作。我怎样才能做到这一点?

回答

2

您的模式[^\w^.]{2,}匹配字“^”和“.”以外的任意两个或多个字符。

要匹配余万字和一个点其他连续相同的字符,你可以使用

([^\w.])\1+ 

$1取代。

查看regex demo

详细

  • ([^\w.]) - 比赛和捕捉到1组比字字符和点
  • \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 . "'"; 
+0

感谢,它的工作就像一个魅力。 – learner

+0

我刚遇到'$ re'遇到双引号,无法正常工作。为什么这样? – learner

+0

您能否提供一个现场演示,如果这不起作用?这是不可能的,因为['[^ \ w。]'匹配''''](https://regex101.com/r/85FJqD/1)。 –