0

「場所、州」以外のすべてのコンマが @ に置き換えられないのはなぜですか?

$test = preg_replace("#([^ ])([,])([^ ])#","$1@$3","100,,,'test','two',,'location, state',,[],1")

予想: 100@@@'test'@'two'@@'location, state'@@[]@1

実際: 100@,,'test'@'two'@,'location, state'@,[]@1

連続したコンマがパターンに一致するためだと思いますが、一致した文字の先頭からすべてのコンマを含めるにはどうすればよいですか?

4

2 に答える 2

1

これを使用してください:

preg_replace('/(?<!\s),(?!\s)/', '@', "100,,,'test','two',,'location, state',,[],1")
于 2012-08-16T05:46:51.303 に答える
0

以前に一致した文字列の部分は、preg_replaceの1回の実行中に再度一致することはありません。したがって、最初の置き換えは次のとおりです。

10(0)(,)(,),'test'  => 100@,,'test'
                            ^

これで、マークされた文字がpreg_replaceが一致できる最初の文字になります->最初の文字と一致するものがないため、これも置き換えられません([^ ])

あなたが探しているのは、先読みと後読みのアサーションです。

preg_replace("#(?<=[^ ])([,])(?=[^ ])#", "@", …)
于 2012-08-16T05:48:58.843 に答える