如何使用给定的正则表达式将字符串拆分为数组

时间:2014-07-03 20:06:51

标签: php regex preg-split

我正在尝试explode / preg_split一个字符串,以便获得( )中包含的所有值的数组。我已经尝试了以下代码,但我总是得到一个空数组,我尝试了很多东西,但我似乎无法做到正确

有人能发现我缺少什么来获得我想要的输出吗?

$pattern = "/^\(.*\)$/";
$string = "(y3,x3),(r4,t4)";
$output = preg_split($pattern, $string);
print_r($output);

当前输出Array ( [0] => [1] => )

所需的输出Array ( [0] => "(y3,x3)," [1] => "(r4,t4)" )

2 个答案:

答案 0 :(得分:4)

使用preg_split(),您的正则表达式应匹配字符串中的分隔符,以将字符串拆分为数组。您的正则表达式目前与相匹配,为此,您可以使用preg_match_all(),如下所示:

$pattern = "/\(.*?\)/";
$string = "(y3,x3),(r4,t4)";
preg_match_all($pattern, $string, $output);
print_r($output[0]);

outputs

Array 
( 
    [0] => (y3,x3) 
    [1] => (r4,t4) 
)

如果您想使用preg_split(),则需要匹配,之间的),(,但不要使用括号,如下所示:

$pattern = "/(?<=\)),(?=\()/";
$string = "(y3,x3),(r4,t4)";
$output = preg_split($pattern, $string);
print_r($output);

这使用positive lookbehind and positive lookahead在两个括号组之间找到,,然后拆分它们。它也输出与上面相同的内容。

答案 1 :(得分:2)

您可以使用像\B,\B这样的简单正则表达式来拆分字符串,并通过避免前瞻性或后瞻性正则表达式来提高性能。

\B是一个非字边界,因此它只匹配,)之间的(

这是一个有效的例子:

http://regex101.com/r/cV7bO7/1

$pattern = "/\B,\B/";
$string = "(y3,x3),(r4,t4),(r5,t5)";
$result = preg_split($pattern, $string);

$ result 将包含:

Array
(
    [0] => (y3,x3)
    [1] => (r4,t4)
    [2] => (r5,t5)
)