从字符串的开头/结尾删除单/双引号,只有它们包含它

时间:2012-12-28 23:21:27

标签: php regex

我正在尝试在PHP中使用正则表达式从字符串的开头和结尾去除单引号或双引号,但我们只想删除它们,如果它们存在于字符串的每一端。这样,用作测量值的报价不会丢失。

例如:

"3' 7"" - would remove quotes
3' 7" - would not remove

我可以使用substrtrim逻辑轻松完成此操作,但我很乐意使用正则表达式一次完成所有操作。

4 个答案:

答案 0 :(得分:3)

要替换单引号或双引号并确保它们必须匹配:

preg_replace('/^([\'"])(.*)\\1$/', '\\2', $value);

答案 1 :(得分:1)

preg_replace('/^"(.*)"$/', '$1', '"3' 7""');

答案 2 :(得分:1)

preg_replace('/^"(.*)"$/', '$1', '"3\' 7""');

答案 3 :(得分:0)

正则表达式的方法是捕获引用,然后再引用它。引号内的东西也应该被捕获,以便它可以用作替代:

$x = array('3\' 7"', '\'3\' 7"\'', '"3\' 7""');
foreach ($x as $y)
    echo preg_replace('/^(["\'])(.*)\\1$/', '$2', $y), '<br>';
die;

现在,正则表达式方式没问题,但是“手动”执行此操作可能会更容易理解并在将来维护:

function remove_quotes($string)
{
    $length = strlen($string);

    if ($length > 2)
    {
        foreach (array('\'', '"') as $quote)
        {
            if ($string[0] === $quote && $string[$length-1] === $quote)
            {
                $string = substr($string, 1, -1);
                break;
            }
        }
    }
    return $string;
}
$x = array('3\' 7"', '\'3\' 7"\'', '"3\' 7""');
foreach ($x as $y)
    echo remove_quotes($y), '<br>';
die;