5

假设我有以下内容:

$string = "(a) (b) (c)";

我将如何分解它以获取括号内的内容。如果字符串的内容仅由一个符号而不是 2 分隔,我会使用:

$string = "a-b-c";
explode("-", $string);

但是,当使用 2 个分隔符来封装要爆炸的项目时,如何做到这一点?

4

7 回答 7

7

您必须使用preg_splitorpreg_match代替。

例子:

$string = "(a) (b) (c)";
print_r(preg_split('/\\) \\(|\\(|\\)/', $string, -1, PREG_SPLIT_NO_EMPTY));
大批
(
    [0] => 一个
    [1] => b
    [2] => c
)

注意顺序很重要。

于 2010-07-25T18:11:38.567 回答
4

如果没有嵌套括号,可以使用正则表达式。

$string = "(a) (b) (c)";
$res = 0;
preg_match_all("/\\(([^)]*)\\)/", $string, $res);
var_dump($res[1]);

结果:

array(3) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
}

http://www.ideone.com/70ZlQ

于 2010-07-25T18:15:13.827 回答
3

如果您知道字符串将始终采用 形式(a) (b) (c),每对括号之间恰好有一个空格,并且开头或结尾没有字符,则可以避免使用正则表达式函数:

$myarray = explode(') (', substr($mystring, 1, -1));
于 2010-07-25T18:18:31.150 回答
1

试试下面的代码:

<?php
  $s="Welcome to (London) hello ";    
  $data = explode('(' , $s );    
  $d=explode(')',$data[1]);    
  print_r($data);    
  print_r($d);    
?>        

输出:

Array ( [0] => Welcome to [1] => London) hello )
Array ( [0] => London [1] => hello )
于 2016-09-20T07:35:29.370 回答
0

也许将 preg_split 与交替模式一起使用:

http://www.php.net/manual/en/function.preg-split.php

于 2010-07-25T18:11:39.457 回答
0

你可以试试preg_split()功能。

于 2010-07-25T18:11:40.107 回答
0

如果你的分隔符是这样一致的,那么你可以这样做

$string = "(a) (b) (c)";
$arr = explode(") (", $string);
// Then simply trim remaining parentheses off.
$arr[0] = trim($arr[0], "()");
end($arr) = trim($arr[0], "()");
于 2010-07-25T18:21:14.627 回答