【问题标题】:How to split a string into an array using a given regex expression如何使用给定的正则表达式将字符串拆分为数组
【发布时间】:2014-07-03 20:06:50
【问题描述】:

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

【问题讨论】:

  • 在您的情况下是否有必要在您的正则表达式中包含 ^ 和 $?我尝试使用 Ungreedy 组捕获您的正则表达式的版本.. 看看这里regex101.com/r/fL6pN5/1
  • 你必须使用preg_match_all,而不是preg_split
  • @Jonathan Thurft 值得一提的是,lookbehind 和lookahead 的使用会影响性能。对于 js 性能测试,您可以检查它here

标签: php regex preg-split


【解决方案1】:

使用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 在两个括号组之间找到,,然后拆分它们。它的输出也和上面一样。

【讨论】:

    【解决方案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)
    )
    

    【讨论】:

    • +1,好主意。既然格式是众所周知的,那似乎是最简单的方式了。
    • @CasimiretHippolyte 很高兴你喜欢它。感谢 +1 :))
    猜你喜欢
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 2021-10-10
    • 1970-01-01
    相关资源
    最近更新 更多