正如您所知道的,使用trim的第二个参数(与ltrim, rtrim相同),您可以添加精确的符号来被修剪。
例如我有字符串:
$myStr = '(!@STRING$)';
如果我用trim
代替符号()!$
,我将得到:
$myStr = trim($myStr,'()!');
echo $myStr; // Output: @STRING$
现在我想修剪所有的符号,除了一些符号,例如@$
:
$myStr = new_trim($myStr,'@$');
echo $myStr; // Output: @STRING$
我可以爆炸我的指针数组和循环字符串从开始直到我的符号将在数组中,从后面,但它看起来不是很好的解决方案。
要获得排除列表而不是包含列表,您需要使用preg_replace而不是trim。Trim只接受您想要删除的符号字符串
这将在您的问题中做您想要的,您只需要添加您想要保留在[]
中的其他符号,记住要转义任何在正则表达式中有意义的符号
preg_replace('/[^@'$'w]/', '', $input);
编辑:只删除字符串
前面和后面的符号preg_replace('/^[^'$@]+|[^'$@]+$/', '', $input);
传递一个要保留的符号变量,你可以这样做
$symbols = '@$';
preg_replace('/^[^'.preg_quote($symbols).']+|[^'.preg_quote($symbols).']+$/', '', $input);