Php “如何替换”&引用;加上“,”&引用;?

Php “如何替换”&引用;加上“,”&引用;?,php,regex,string,Php,Regex,String,我想把字符串中的“Some句子,Some句子”替换为“Some句子,[空格]Some句子” 我尝试了str\u replace(“,”,“,”,“,$str),但问题是这会同时替换“,”、[Space]“creating”、[Space]“and”、[Space][Space]”。有没有办法只替换两个句子之间的逗号 我希望你明白我的意思。你可以这样做: $string = 'Some Sentence,Some Sentence don\'t touch, this one but,thison

我想把字符串中的“Some句子,Some句子”替换为“Some句子,[空格]Some句子”

我尝试了
str\u replace(“,”,“,”,“,$str)
,但问题是这会同时替换“,”、[Space]“creating”、[Space]“and”、[Space][Space]”。有没有办法只替换两个句子之间的逗号


我希望你明白我的意思。

你可以这样做:

$string = 'Some Sentence,Some Sentence don\'t touch, this one but,thisone do, also';
echo preg_replace('~,([^\s])~', ', $1', $string);
$str = str_replace(", ", ",", $str);
$str = str_replace(",", ", ",$str);
也就是说,查找一个逗号
,下一个字符
[^\s]
不带空格。
[]
是一个列出字符的字符类,
^
使其成为一个否定搜索。
~
是分隔符,指示正则表达式的开始和结束位置

更新:
()
捕获非空白字符,并将其与
和空格一起返回

\s
是任何空白字符(制表符、换行符、空格)。如果只需要空格,请将其更改为水平空格
\h

Regex101演示:

更新:

另一种办法:

$string = 'Some Sentence,Some Sentence don\'t touch, this one but,thisone do, also';
    echo preg_replace('~,\s(*SKIP)(*FAIL)|,~', ', ', $string);
这表示如果它找到一个带空格的逗号,首先跳过它,否则添加带空格的逗号。这里有一篇关于这种方法的文章


演示:

另一种方法是这样做:

$string = 'Some Sentence,Some Sentence don\'t touch, this one but,thisone do, also';
echo preg_replace('~,([^\s])~', ', $1', $string);
$str = str_replace(", ", ",", $str);
$str = str_replace(",", ", ",$str);

虽然正则表达式解决方案更强大(它可以在无限空间上工作),但这一解决方案可能对新手更友好。

如果分隔符一致,您还可以利用直字符串操作:

$foo = "Something,Something";
$bar = implode(", ", explode(",", $foo));
explode
使用分隔符作为标记创建数组<代码>内爆使用新的分隔符将其连接回


注意:这将而不是考虑空格(和其他字符)很重要的情况。但是这是一个简单的替代方法。

或者,您可以使用负前瞻来检查
后面的字符是否不是空白字符,然后将其替换为

$str = "begin,space, no sp,   not space,space,,~~~,@@##$,end";
$str = preg_replace('/,(?!\s)/', ", ", $str);
输出:
begin,space,no sp,not space,space,~~,@@###$,end


研究正则表达式。用regexp标记问题,以便有正则表达式经验的人帮助您。看到这个句子之间的分隔符是什么吗?逗号?若句子中也有逗号呢?若要在单词边界处添加空格,请使用:
$str=preg\u replace('/,\b/,“,”,$str)
如果你的文本中有逗号,比如
1,1
:对于α
/,(?=[a-z])/i
当我把它应用到
实验物理,引力物理,暗物质,暗能量时,我得到了
实验物理,引力物理,方舟物质,方舟能量
为什么,它仍然找到了非空白字符,因此需要捕获该字符。更新的答案。对于这个简单的问题,你的第二个解决方案是过分的。此外,该功能在大多数语言中都不可用,因此最好先尝试在没有它们的情况下编写正则表达式。实际上,我根本不明白在这种情况下什么是分隔符。。。如果只是一个逗号,那么简单的str_替换也可以。显然,在…之间有一些空白字符。。。