preg_更换不工作?PHP
为什么除了“location,state”中的逗号外,其他所有逗号都替换为@preg_更换不工作?PHP,php,regex,preg-replace,Php,Regex,Preg Replace,为什么除了“location,state”中的逗号外,其他所有逗号都替换为@ $test = preg_replace("#([^ ])([,])([^ ])#","$1@$3","100,,,'test','two',,'location, state',,[],1") 应为:100@@@test'@'two'@'位置,state'@[]@1 实际值:100,"测试","两个","位置,状态",【】1 我认为这是因为模式中的连续逗号是匹配的,如何使其从匹配字符的开头继续包含所有逗号?使用此逗
$test = preg_replace("#([^ ])([,])([^ ])#","$1@$3","100,,,'test','two',,'location, state',,[],1")
应为:100@@@test'@'two'@'位置,state'@[]@1
实际值:100,"测试","两个","位置,状态",【】1
我认为这是因为模式中的连续逗号是匹配的,如何使其从匹配字符的开头继续包含所有逗号?使用此逗号:
preg_replace('/(?<!\s),(?!\s)/', '@', "100,,,'test','two',,'location, state',,[],1")
preg_replace('/(?字符串中以前已匹配的部分在一次preg_replace运行期间不会再次匹配。因此,第一次替换如下:
10(0)(,)(,),'test' => 100@,,'test'
^
现在,标记的字符是preg_replace允许匹配的第一个字符->它也不会被替换,因为第一个([^])
没有匹配的内容
你要找的是
preg_replace(“#”)(?您当前的结果和预期的结果是什么?
preg_replace("#(?<=[^ ])([,])(?=[^ ])#", "@", …)