【问题标题】:preg_split and square bracketspreg_split 和方括号
【发布时间】:2023-03-25 21:37:02
【问题描述】:

提前谢谢,我在 REGEX 上很糟糕!

假设我有一个字符串,例如:

[GROUP]Some Stuff[GROUP]Some more stuff[GROUP]Some other stuff

我想在 [GROUP] 处拆分字符串,将结果弹出到数组中 eg:

Array( [0] => Some Stuff [1] => Some more stuff [2] => Some other stuff )

使用以下

$groups = preg_split("[GROUP]", $p['features']);

但它在我的数组中留下了 [ 和 ]。

Array( [0] => [ [1] => ]Some Stuff[ [2] => ]Some more stuff[ [3] => ]Some other stuff )

我确信必须有一些花哨的转义方法或斜线或括号或其他东西才能使其正常工作,但我的随机拍摄没有任何运气。谷歌搜索通常会告诉我如何从方括号之间取出文本,但并不能完全帮助我做我想做的事情。

有什么想法吗?

【问题讨论】:

    标签: php regex


    【解决方案1】:

    [] 用于字符类,因此您需要对它们进行转义。您还需要分隔符(这里我使用 #),因为在您的正则表达式中,[] 充当分隔符:

    $groups = preg_split("#\[GROUP\]#", $p['features']);
    

    要只返回非空组,请使用PREG_SPLIT_NO_EMPTY

    $groups = preg_split("#\[GROUP\]#", $p['features'], null, PREG_SPLIT_NO_EMPTY);
    

    如果您希望 GROUP 可变,则使用 [ 后跟 1 个或多个 NOT ] 后跟 ]

    "#\[[^\]]+\]#"
    

    这将在[SOMETHING ELSE] 等...

    【讨论】:

    • 我将其标记为正确,因为它在技术上回答了我的问题,不幸的是结果并不是我想要的 - 希望避免数组中 [0] 处的空元素。不过感谢您的帮助!
    • 然后使用PREG_SPLIT_NO_EMPTY作为第四个参数。
    【解决方案2】:

    如果您不想(并且如果要求允许),则无需为此使用正则表达式:

    $string = "[GROUP]Some Stuff[GROUP]Some more stuff[GROUP]Some other stuff";
    $array = explode('[GROUP]', $string);
    

    生产:

    Array
    (
        [0] => 
        [1] => Some Stuff
        [2] => Some more stuff
        [3] => Some other stuff
    )
    

    如果要删除空元素并重新索引:

    unset($array[0]);
    $array = array_values($array);
    

    或者,要完全避免开头或结尾出现空元素,请使用trim()

    $string = "[GROUP]Some Stuff[GROUP]Some more stuff[GROUP]Some other stuff";
    $array = explode('[GROUP]', trim($string, '[GROUP]'));
    

    生产:

    Array
    (
        [0] => Some Stuff
        [1] => Some more stuff
        [2] => Some other stuff
    )
    

    【讨论】:

    • 是的,我一直希望找到一些可以避免拉出空元素的必要性。似乎下面的 preg_split 让我处于相同的位置。
    • @Sanfly 我添加了另一个选项,以避免在拆分后执行此操作。使用trim()
    猜你喜欢
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 2019-08-26
    • 1970-01-01
    相关资源
    最近更新 更多