我需要删除字符串的外括号,而不是内部字符串。
例如:
"(-58)" -> "-58"
"('test')" -> "'test'"
"('st())" -> "st()"
" (hd)h(l() ) " -> "hd)h(l() " --> removed all chars up to the bracket
希望你能看出我的意思。
我知道如何删除字符串中的所有括号,但我不知道如何删除第一个和最后一个。我还需要将所有字符移到支架上,因为在支架之前/之后可能有一个我不想要的空间。
非常感谢任何帮助。
答案 0 :(得分:2)
一种方法是使用preg_replace()
。此正则表达式根据您的示例替换前导和尾随括号(仅一个)和空格:
/(^\s*\()|(\)\s*$)/
你可以像这样使用它:
$string = ' (hd)h(l() ) ';
$pattern = '/(^\s*\()|(\)\s*$)/';
$replacement = '';
echo preg_replace($pattern, $replacement, $string); // Output: "hd)h(l() "
答案 1 :(得分:1)
使用php的trim()
可能会导致意外的过度匹配。请考虑以下实现:
$strings=[
"(-58)", // -> "-58"
"('test')", // -> "'test'"
"('st())", // -> "st()"
" (hd)h(l() ) ", // -> "hd)h(l() " --> removed all chars up to the bracket
" ((2x parentheses))" // -> assumed to be "(2x parentheses)"
];
foreach($strings as $s){
// use double trim() to strip leading/trailing spaces, then parentheses
var_export(trim(trim($s,' '),'()'));
echo "\n";
}
输出:
'-58'
'\'test\''
'\'st'
'hd)h(l() '
'2x parentheses' // notice this string had two sets of parentheses removed!
虽然可以使用几个字符串操作函数 来生成所需的字符串,但使用正则表达式是一种更直接的方法。
给出以下输入数据:
(-58)
('test')
('st())
(hd)h(l() )
((2x parentheses))
Gergo的模式将使用 261步中的空字符串准确地替换所需的字符。
我想建议一个更有效和简洁的模式,给定OP的样本字符串具有相同的准确度。
/^ ?\(|\) ?$/ #142 steps
增强:
\s
。 (提高简洁度*和潜在的准确性)zero or more
减少到zero or one
。 (更多文字到样本数据)答案 2 :(得分:-1)
您可以使用trim()函数,如下所示
$a="(-58)";
$str=trim($a,"()");
echo $str;