【发布时间】:2018-10-17 05:03:50
【问题描述】:
要在字符串中用逗号和空格替换空格,我应该这样做:
$result = preg_replace('/[ ]+/', ', ', trim($value));
结果:Some, example, here, for, you
但是,我只想替换 3d 空白,因此结果如下所示:
Some example here, for you
我该怎么做?
【问题讨论】:
标签: php regex preg-replace
要在字符串中用逗号和空格替换空格,我应该这样做:
$result = preg_replace('/[ ]+/', ', ', trim($value));
结果:Some, example, here, for, you
但是,我只想替换 3d 空白,因此结果如下所示:
Some example here, for you
我该怎么做?
【问题讨论】:
标签: php regex preg-replace
你可以使用类似的东西
$value = " Some example here for you ";
$result = preg_replace('/^\S+(?:\s+\S+){2}\K\s+/', ',$0', trim($value), 1);
echo $result; // => Some example here, for you
请参阅PHP demo 和regex demo。
模式详情
^ - 字符串开头\S+ - 1+ 个非空格(?:\s+\S+){2} - 连续两次出现
\s+ - 1+ 个空格\S+ - 1+ 个非空格\K - 匹配重置运算符\s+ -(替换模式中的 $0 引用此子字符串)1+ 个空格。【讨论】:
$value 是trim()med。
您可以使用回调函数并控制何时替换:
<?php
$string = 'Some example here for you';
$i = 0;
$string = preg_replace_callback('/\s+/',function($m) use(&$i){
$i++;
if($i == 3) {
return ', ';
}
return ' ';
},$string);
echo $string;
【讨论】:
试试这个
$result = preg_replace('/^([^\s]+)\s+((?1)\s+(?1))/', '\1 \2,', trim($value));
解释:
^ 字符串开头([^\s]+) - 捕捉一切而不是空间\s+空格1个或更多((?1)\s+(?1)) - (?1) 重复第一个捕获组,我们这样做 2x 之间有一个空格,然后捕获它。我想您可以单独捕获它们,但有什么意义。 (?{n}) 的好处在于,如果您必须更改捕获单词的正则表达式,您只需更改 1 次,而不是 3 次。可能在这里没那么重要,但我喜欢使用它。 ..
【讨论】: