我正在尝试在 PHP 中使用正则表达式从字符串的开头和结尾去除单引号或双引号,但如果它们存在于字符串的每一端,我们只想删除它们。这样,用作度量的引号就不会丢失。
例如:
"3' 7"" - would remove quotes
3' 7" - would not remove
我可以很容易地用逻辑来做到这一点substr
,trim
但我很想用正则表达式一次完成。
要替换单引号或双引号并确保它们必须匹配:
preg_replace('/^([\'"])(.*)\\1$/', '\\2', $value);
preg_replace('/^"(.*)"$/', '$1', '"3' 7""');
preg_replace('/^"(.*)"$/', '$1', '"3\' 7""');
执行此操作的正则表达式方法是捕获引用,然后稍后再引用它。引号内的内容也应该被捕获,以便可以用作替换:
$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;