Php 从字段中删除双引号

Php 从字段中删除双引号,php,regex,csv,fgetcsv,Php,Regex,Csv,Fgetcsv,下面是我正在解析的csv文件的当前格式 "Street","City","Country" "House # 3, Street "23, H, Block". Building 32", "CityName", "Country" 在这里,您可以看到23,H,Block被双引号和逗号包围——当我使用下面的代码解析这个文件时 while (! feof($file)) { // provide last parameter so in case we get \ in a field

下面是我正在解析的csv文件的当前格式

"Street","City","Country"
"House # 3, Street "23, H, Block". Building 32", "CityName", "Country"
在这里,您可以看到
23,H,Block
被双引号和逗号包围——当我使用下面的代码解析这个文件时

while (! feof($file)) {
    // provide last parameter so in case we get \ in a field it 
    // doesn't break the data
    $row = fgetcsv($file, null, ",", '"', '"');
    // so we don't send anything besides array
    if (count($row) > 0) {
        // if array is empty we don't pass it to further proceeding
        if ($row) {
            $sorted[] = array_merge($rows, $row);
        }
    }
}
解析将
23
h
Block
划分为不同的元素,而它们应该是一个元素

事情就是这样

array:2 [▼
  0 => array:3 [▼
    0 => "Street"
    1 => "City"
    2 => "Country"
  ]
  1 => array:5 [▼
    0 => "House # 3, Street 23"
    1 => " H"
    2 => " Block". Building 32""
    3 => "CityName"
    4 => "Country"
  ]
]
虽然我想要这样

array:2 [▼
  0 => array:3 [▼
    0 => "Street"
    1 => "City"
    2 => "Country"
  ]
  1 => array:3 [▼
    0 => "House # 3, Street 23, H, Block. Building 32"
    1 => "CityName"
    2 => "Country"
  ]
]

如果我可以使用一些正则表达式模式从整个csv文件中删除不需要的引号,这将很有帮助

我认为您应该关注如何正确地将行/行拆分为标记,而不是从行中删除不需要的双引号字符

块分隔符的形式为“
”、“
或“
”、“
”,因此分割行的正则表达式将是

(?<="),\s*(?=")

(?如果字段中有引号,则需要对其进行转义。请修复创建该文件的程序。哎呀,我不是在创建该文件,所以我正在尝试找到一种方法来完成此操作-类似于
file\u get\u content()
找到额外的引号,然后使用
file\u put\u content()删除它们)
重写文件,然后对其进行解析您可以使用正则表达式匹配不在逗号或行的开头/结尾旁边的引号,并将其删除。是的,这就是为什么我说
如果我可以使用一些正则表达式模式从整个csv文件中删除不需要的引号,这将非常有用
请参见基于
\B”\B((?:[^”]*|(?R))*)\b“\b
regex。如果你的引号真的包含了单词边界/非单词边界,其实并不难。否则,这是不可能的。