我对正则表达式还很陌生。我需要替换一段多行文本中的空格。替换规则如下:
- 将行首的所有空格替换为不间断空格 (
- 用相同数量的不间断空格替换任何重复空格的实例(多个空格在一起)。
- 不在行首的单个空格保持不变。
我使用了 Regex Coach构建匹配模式:
/( ){2,}|^( )/
假设我有这个输入文本:
asdasd asdasd asdas1
asda234 4545 54
34545 345 34534
34 345
使用 PHP 正则表达式替换函数(如 preg_replace()
),我想得到这个输出:
asdasd asdasd  asdas1
 asda234 4545    54
  34545 345  34534
34 345
我很乐意使用正则表达式进行简单的文本替换,但我无法弄清楚如何在匹配项中多次替换以获得我想要的输出。
最佳答案
我想找到每个空格并替换它会更容易。为此,请使用“向前看”和“向后看”组。
或者,找到一个空格 (\x20
),该空格由任何单个空格 (\s
) 开头或后跟;但是,只替换空格。
$str = "asdasd asdasd asdas1\n asda234 4545 54\n 34545 345 34534\n34 345\n";
print preg_replace("/(?<=\s)\x20|\x20(?=\s)/", " ", $str);
(我选择了 #160,因为 markdown 解析 nbsp。)
结果:
asdasd asdasd  asdas1
 asda234 4545    54
  34545 345  34534
34 345
回复评论
@ Sprogz : 一开始我也是这么想的。但是这个例子在第 1 行和第 2 行之间显示了 "\n "=> "\n "
。
关于php - 在 PHP 中使用正则表达式替换空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/208046/