PHP str_replace任意空间组合

时间:2016-02-10 17:47:45

标签: php regex string replace

我想确保字符串中的/字符始终用两边的单个空格填充。

对于PHP,我目前正在使用str_replace,但我不能保证任何数量的空格的所有场景。

$original = "Yes/No";

echo str_replace("/", " / ", $original) . "\n";
echo str_replace(" /", " / ", $original) . "\n";
echo str_replace("/ ", " / ", $original) . "\n";

我知道我传递给str_replace函数的第一个参数/参数是错误的,因为它没有考虑到周围的字符。

以下是我想要实现的一些例子:

Original            Desired
==============================
"Yes/No" ---------> "Yes / No"
"Yes / No" -------> "Yes / No"
"Yes/ No" --------> "Yes / No"
"Yes /No" --------> "Yes / No"
"Yes  /  No" -----> "Yes / No"

我倾向于使用regex,但我不知道如何使用它们。

修改

现在我想到了,也许我可以通过折叠空间来做到这一点?不确定。

3 个答案:

答案 0 :(得分:4)

您可以使用此基于正则表达式的替换:

$original = preg_replace('~\h*/\h*~', ' / ', $original);

即。匹配/两侧的变量空格,并替换为' / '

RegEx Demo

答案 1 :(得分:1)

preg_replace( "/(\s+)?\/(\s+)?/", ' / ', 'yes/ no');

细分:

(\s+)?匹配零个或多个空格字符

\/匹配斜杠

(\s+)?匹配零个或多个空格字符

根据{{​​1}}中的正则表达式,

preg_replace(a,b,c)c的匹配位替换为b

这将修复a(零空格),yes/no(一边是空白)或yes /no(不均匀的空格)。

答案 2 :(得分:0)

或使用lil looop

while(strpos($str, "  ") !== false)
    $str = str_replace("  ", " ", $str);

https://3v4l.org/vYCgB