PHP删除字符串外部的括号

时间:2014-07-08 10:04:16

标签: php replace str-replace brackets outer-join

我需要删除字符串的外括号,而不是内部字符串。

例如:

"(-58)"         -> "-58"
"('test')"      -> "'test'"
"('st())"       -> "st()"
" (hd)h(l() ) " -> "hd)h(l() "  --> removed all chars up to the bracket

希望你能看出我的意思。

我知道如何删除字符串中的所有括号,但我不知道如何删除第一个和最后一个。我还需要将所有字符移到支架上,因为在支架之前/之后可能有一个我不想要的空间。

非常感谢任何帮助。

3 个答案:

答案 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

Demo Link

增强:

  1. 管道不需要捕获组来分隔两个备选方案。 (提高效率和简洁性)
  2. 用文字空格字符替换空白字符\s。 (提高简洁度*和潜在的准确性)
  3. 将空格上的量词从zero or more减少到zero or one。 (更多文字到样本数据)

答案 2 :(得分:-1)

您可以使用trim()函数,如下所示

    $a="(-58)";
    $str=trim($a,"()");
    echo $str;