preg_replace双引号不跟逗号

时间:2015-10-05 15:30:26

标签: php regex

我正在尝试找到正确的正则表达式模式,以便在逗号,

之后替换双引号

在下面的字符串中,只有在一些不是分隔符/逗号的字符后才会删除一个双引号

"ahys"", "hshs","", "277-""

上述字符串在preg_replace

之后更改为此字符串
"ahys", "hshs","", "277-"

我正在使用这种模式,但它不起作用 - 它不仅替换了引号而且还替换了左侧的一个字符

preg_replace('/([^"",])["]["]/', '"', '"ahys"", "hshs","", "277-""');

结果:

  

“ahy”,“hshs”,“”,“277”

有谁可以告诉我这里的模式有什么问题?

3 个答案:

答案 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

?>