如何删除每一个空格正则表达式?

时间:2014-02-03 18:26:06

标签: php regex preg-replace spaces

我有这个字符串:

LP-----A0000001------A0000002

我需要regexp,它会将此字符串格式化为此字符串(在每个第一个字符串之后删除每个字符串。)

这样的事情:

LP-A0000001-A0000002

我试图在php中使用preg_replace()进行此操作,但我无法完成它。

4 个答案:

答案 0 :(得分:2)

您可以尝试匹配两个或多个空格并替换为单个空格:

$out = preg_replace('/  +/', ' ', $in);

对于你的例子,它将是:

$out = preg_replace('/--+/', '-', $in);

regex101 demo

答案 1 :(得分:1)

代表空格:

$result = preg_replace('~(?<= ) +~', '', $str);

(?<=...)是一个后视,意味着前面有

适用于所有类型的空格:

$result = preg_replace('~(?<=\s)\s+~', '', $str);

表示水平空格:

$result = preg_replace('~(?<=\h)\h+~', '', $str);

答案 2 :(得分:0)

如果您只想用一个连字符替换连字符组,可以使用以下正则表达式匹配它们的任何长度:

$str = 'LP-----A0000001------A0000002';
$result = preg_replace('/(\-+)/', '-', $str);

答案 3 :(得分:0)

/-{2,}/Demo

上使用:LP-----A0000001------A0000002

这将匹配2个或更多个连字符,实际上只会进行两次替换。

使用:/-+/也会匹配单个连字符并将其替换为自己(浪费精力/无变化)。

使用lookbehind效率会降低,因为lookarounds需要花费更多的步骤才能完成。