在 PHP 中删除字符串开头和结尾的引号

2022-08-30 10:57:32

我有这样的字符串:

"my value1" => my value1
"my Value2" => my Value2
myvalue3 => myvalue3 

我需要删除结束和开始中的(双引号),如果存在,但如果字符串中有这种字符,那么它应该留在那里。例:"

"my " value1" => my " value1

我如何在PHP中执行此操作 - 是否有此功能,或者我必须自己编写代码?


答案 1

字面的答案是

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 是唯一正确的选择。它将处理所有边缘情况,并剥离价值外壳。


答案 2

我有类似的需求,并编写了一个函数,该函数将从字符串中删除前导和尾随的单引号或双引号:

/**
 * 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


推荐