我正在尝试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)" )
答案 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)
)