我正在尝试找到正确的正则表达式模式,以便在逗号,
在下面的字符串中,只有在一些不是分隔符/逗号的字符后才会删除一个双引号
"ahys"", "hshs","", "277-""
上述字符串在preg_replace
"ahys", "hshs","", "277-"
我正在使用这种模式,但它不起作用 - 它不仅替换了引号而且还替换了左侧的一个字符
preg_replace('/([^"",])["]["]/', '"', '"ahys"", "hshs","", "277-""');
结果:
“ahy”,“hshs”,“”,“277”
有谁可以告诉我这里的模式有什么问题?
答案 0 :(得分:3)
也许这个:
(?<!^|,\s|,)"(?!,|$)
https://regex101.com/r/cE2yD0/1
它使用外观来查找符合以下条件的"
:
不在字符串的开头或结尾
,
之前或之后没有"
之前的可选空格
答案 1 :(得分:1)
如果您不想使用正则表达式外观,那么您可以使用这样的正则表达式:
("[\w-]+?")"
使用替换字符串:
$
<强> Working demo 强>
代码
$re = '/("[\w-]+?")"/';
$str = "\"ahys\"\", \"hshs\",\"\", \"277-\"\"\n";
$subst = "$1";
$result = preg_replace($re, $subst, $str);
答案 2 :(得分:0)
你也可以使用更快的str_replace
<?php
$str = 'test one -> " <- removed, not -> ", <- removed, not -> ," <- removed'
echo str_replace( array( '",', ',"', '"', '%@@%,', ',%@@%' ), array( '%@@%,', ',%@@%', '', '",', ',"'), $str );
// prints test one -> <- removed, not -> ", <- removed, not -> ," <- removed
?>