我试图在PHP中使用正则表达式从字符串的开始和结尾去除单引号或双引号,但我们只想删除他们如果他们存在于字符串的每一端。这样,用作测量的引号就不会丢失。从字符串的开始/结尾删除单引号或双引号,仅当它们包含它时
例如:
"3' 7"" - would remove quotes
3' 7" - would not remove
我可以很容易地做到这一点与substr
和trim
逻辑,但我很愿意和正则表达式来做到这一切在一次。
我试图在PHP中使用正则表达式从字符串的开始和结尾去除单引号或双引号,但我们只想删除他们如果他们存在于字符串的每一端。这样,用作测量的引号就不会丢失。从字符串的开始/结尾删除单引号或双引号,仅当它们包含它时
例如:
"3' 7"" - would remove quotes
3' 7" - would not remove
我可以很容易地做到这一点与substr
和trim
逻辑,但我很愿意和正则表达式来做到这一切在一次。
要更换单或双引号,并确保它们必须匹配:
preg_replace('/^([\'"])(.*)\\1$/', '\\2', $value);
preg_replace('/^"(.*)"$/', '$1', '"3' 7""');
加上一个写准确和我一样,但你能更快^^,你也忘了逃跑的报价在3' 7 :) –
人,在事后我不知道为什么我没有关于这个解决方案。谢谢! – helion3
我必须指出,这只能匹配双引号。如果您确实需要按您在问题中指定的单引号或双引号引用,请参阅下面的答案。 –
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;
对,我意识到看到它错过了两种类型的第一个解决方案。在我的代码中,这个解决方案非常完美。谢谢! – helion3