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

标签 php regex replace preg-replace

我对正则表达式还很陌生。我需要替换一段多行文本中的空格。替换规则如下:

  • 将行首的所有空格替换为不间断空格 ( )。
  • 用相同数量的不间断空格替换任何重复空格的实例(多个空格在一起)。
  • 不在行首的单个空格保持不变。

我使用了 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)/", "&#160;", $str);

(我选择了 #160,因为 markdown 解析 nbsp。)

结果:

asdasd asdasd&#160;&#160;asdas1
&#160;asda234 4545&#160;&#160;&#160;&#160;54
&#160;&#160;34545 345&#160;&#160;34534
34 345

有关更多信息,请查看 PCREperlre .


回复评论

@ Sprogz : 一开始我也是这么想的。但是这个例子在第 1 行和第 2 行之间显示了 "\n "=> "\n "

关于php - 在 PHP 中使用正则表达式替换空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/208046/

相关文章:

php - 我们如何在产品页面中显示每个子类别中的一个产品

r - gsub,括号内的内容偶尔由换行符而不是右括号

C# - 读取/复制/替换文本中的行

javascript - 查找并替换文本而不破坏点击事件

php - JavaScript 中的输入元素

php - 用于发布到页面的 Facebook Graph API 无法在新服务器上运行

javascript - Javascript 所需的正则表达式指南

在 Vim 中搜索和替换多行并转换为小写

php - 查询 MAX 函数不起作用

php - 使用正则表达式搜索并替换数据库中存在的电子邮件 ID