在PHP中使用正则表达式替换空格

Rom*_*anz 3 php regex replace preg-replace

我对正则表达式很新.我需要替换一行多行文本中的空格.替换规则如下:

  • 使用不间断的空格( )替换行首的所有空格.
  • 用相同数量的非中断空格替换重复空格的任何实例(多个空格在一起).
  • 不在线路的单个空间保持不变.

我使用Regex Coach来构建匹配模式:

/( ){2,}|^( )/
Run Code Online (Sandbox Code Playgroud)

我们假设我有这个输入文本:

asdasd asdasd  asdas1
 asda234 4545    54
  34545 345  34534
34 345
Run Code Online (Sandbox Code Playgroud)

使用PHP正则表达式替换函数(如preg_replace()),我想得到这个输出:

asdasd asdasd  asdas1
 asda234 4545    54
  34545 345  34534
34 345
Run Code Online (Sandbox Code Playgroud)

我很高兴使用正则表达式进行简单的文本替换,但是我无法解决如何在匹配中替换多次以获得我想要的输出.

Jon*_*ski 6

我猜想找到每个空间并更换它会更容易.为此,请使用"预见"和"后视"组.

或者,找到一个\x20由任何单个空格(\s)引导或后跟的空格(); 但是,只能更换空间.

$str = "asdasd asdasd  asdas1\n asda234 4545    54\n  34545 345  34534\n34 345\n";

print preg_replace("/(?<=\s)\x20|\x20(?=\s)/", "&#160;", $str);
Run Code Online (Sandbox Code Playgroud)

(因为降价解析,我选择了#160)

结果是:

asdasd asdasd&#160;&#160;asdas1
&#160;asda234 4545&#160;&#160;&#160;&#160;54
&#160;&#160;34545 345&#160;&#160;34534
34 345
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请查看PCREperlre.


回复评论

@ Sprogz:起初,我的想法是一样的.但是该示例显示了"\n " => "\n&nbsp;"第1行和第2行之间的行.