如何防止 trim 中的某些字符在 php 中起作用
How to prevent some characters in trim function in php
我在变量中有一个字符串
$str = '"100 \""';
我想对 trim '"'
(双引号)字符使用 trim 函数,转义字符后的字符除外。
$str = trim($str, '"');
但它是 trim所有双引号,
那么谁能告诉我如何防止这种情况发生?
无论如何,我已经为此编写了自己的 trim 函数,但想在 php.
中使用标准 API 函数
很好,我咬。您需要使用的是正则表达式中的负向回顾。表达式的最简单形式如下所示:
/(?<!\)"/
细分:
(?<!
:负向后看。这意味着您要检查表达式是否 而不是 前面有特定模式:
\)
:后视模式。在这种情况下,模式只有在其前面没有文字 \
. 时才会匹配
"
:文字 "
。同样,由于回溯,您不会匹配转义的双引号。
demo
对于您的情况,您可能正在寻找:
$str = preg_replace('/(?<!\)"/', '', $str);
用空字符串替换所有未转义的 "
(基本上删除它们)。
因为您使用的是 trim
,您可能只想删除前导引号和尾随引号。在那种情况下,您必须稍微改变一下表达式,然后使用:
/(?<!\)(^"|"$)/
细分:
(?<!\)
: 和以前一样(负后视)
(^"|"$)
:仍然匹配文字 "
,但前提是它是字符串的开头或结尾。
当然,您并不真的需要前导引号的回顾,所以这个表达式同样有效(如果不是更好的话):
/(^"|(?<!\)"$)/
细分:
^"
:匹配字符串中的第一个字符,如果它是未转义的 "
.
(?<!\)
:相同的旧负面回顾
"$
:匹配字符串末尾的双引号(仅当其前面没有 \
时,根据负向后视
这两个正则表达式都允许您像这样处理字符串:
$str = '"foo"bar\""';
echo preg_replace('/(^"|(?<!\)"$)/', '', $str);
输出foo"bar\"
Demo II
尝试用负向回顾替换正则表达式。像这样的一些表达式应该可以解决问题:
(?<!\)"
我在变量中有一个字符串
$str = '"100 \""';
我想对 trim '"'
(双引号)字符使用 trim 函数,转义字符后的字符除外。
$str = trim($str, '"');
但它是 trim所有双引号, 那么谁能告诉我如何防止这种情况发生? 无论如何,我已经为此编写了自己的 trim 函数,但想在 php.
中使用标准 API 函数很好,我咬。您需要使用的是正则表达式中的负向回顾。表达式的最简单形式如下所示:
/(?<!\)"/
细分:
(?<!
:负向后看。这意味着您要检查表达式是否 而不是 前面有特定模式:\)
:后视模式。在这种情况下,模式只有在其前面没有文字\
. 时才会匹配
"
:文字"
。同样,由于回溯,您不会匹配转义的双引号。
demo
对于您的情况,您可能正在寻找:
$str = preg_replace('/(?<!\)"/', '', $str);
用空字符串替换所有未转义的 "
(基本上删除它们)。
因为您使用的是 trim
,您可能只想删除前导引号和尾随引号。在那种情况下,您必须稍微改变一下表达式,然后使用:
/(?<!\)(^"|"$)/
细分:
(?<!\)
: 和以前一样(负后视)(^"|"$)
:仍然匹配文字"
,但前提是它是字符串的开头或结尾。
当然,您并不真的需要前导引号的回顾,所以这个表达式同样有效(如果不是更好的话):
/(^"|(?<!\)"$)/
细分:
^"
:匹配字符串中的第一个字符,如果它是未转义的"
.(?<!\)
:相同的旧负面回顾"$
:匹配字符串末尾的双引号(仅当其前面没有\
时,根据负向后视
这两个正则表达式都允许您像这样处理字符串:
$str = '"foo"bar\""';
echo preg_replace('/(^"|(?<!\)"$)/', '', $str);
输出foo"bar\"
Demo II
尝试用负向回顾替换正则表达式。像这样的一些表达式应该可以解决问题:
(?<!\)"