在 PHP 中删除字符串开头和结尾的引号
我有这样的字符串:
"my value1" => my value1
"my Value2" => my Value2
myvalue3 => myvalue3
我需要删除结束和开始中的(双引号),如果存在,但如果字符串中有这种字符,那么它应该留在那里。例:"
"my " value1" => my " value1
我如何在PHP中执行此操作 - 是否有此功能,或者我必须自己编写代码?
我有这样的字符串:
"my value1" => my value1
"my Value2" => my Value2
myvalue3 => myvalue3
我需要删除结束和开始中的(双引号),如果存在,但如果字符串中有这种字符,那么它应该留在那里。例:"
"my " value1" => my " value1
我如何在PHP中执行此操作 - 是否有此功能,或者我必须自己编写代码?
字面的答案是
trim($string,'"'); // double quotes
trim($string,'\'"'); // any combination of ' and "
它将从字符串中删除所有前导引号和尾随引号。
如果您需要严格删除第一个和最后一个引号,以防它们存在,那么它可能是这样的正则表达式
preg_replace('~^"?(.*?)"?$~', '$1', $string); // double quotes
preg_replace('~^[\'"]?(.*?)[\'"]?$~', '$1', $string); // either ' or " whichever is found
如果您仅在前导和尾随引号严格配对的情况下才需要删除,请使用史蒂夫·钱伯斯答案中的函数
但是,如果您的目标是从 CSV 文件中读取值,则 fgetcsv 是唯一正确的选择。它将处理所有边缘情况,并剥离价值外壳。
我有类似的需求,并编写了一个函数,该函数将从字符串中删除前导和尾随的单引号或双引号:
/**
* Remove the first and last quote from a quoted string of text
*
* @param mixed $text
*/
function stripQuotes($text) {
return preg_replace('/^(\'(.*)\'|"(.*)")$/', '$2$3', $text);
}
这将产生下面列出的输出:
Input text Output text
--------------------------------
No quotes => No quotes
"Double quoted" => Double quoted
'Single quoted' => Single quoted
"One of each' => "One of each'
"Multi""quotes" => Multi""quotes
'"'"@";'"*&^*'' => "'"@";'"*&^*'
正则表达式演示(显示正在匹配/捕获的内容):https://regex101.com/r/3otW7H/1