preg_split和方括号

时间:2017-05-16 02:36:06

标签: php regex

先谢谢,我在REGEX很糟糕!

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

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

我想在[GROUP]中拆分字符串,将结果弹出一个数组,例如:

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 )

我敢肯定必须有一些花哨的方法来逃避或斜线或括号或某些东西才能使这个工作,但我对随机拍摄没有任何好运。谷歌搜索一般告诉我如何从方括号之间取出文本,但不能帮助我做我想做的事。

有什么想法?

2 个答案:

答案 0 :(得分:1)

this.currentEditor.session.setAnnotations([{ row: this.currentLine - 1, column: 0, text: message, //<---- very long text type: "info" }]); 用于字符类,因此您需要转义它们。你还需要分隔符(这里我使用[]),因为在你的正则表达式中#充当了分隔符:

[]

要仅返回非空组,请使用$groups = preg_split("#\[GROUP\]#", $p['features']);

PREG_SPLIT_NO_EMPTY

如果您希望$groups = preg_split("#\[GROUP\]#", $p['features'], null, PREG_SPLIT_NO_EMPTY); 变量,请使用GROUP后跟一个或多个NOT [后跟]

]

这将分为"#\[[^\]]+\]#" 等...

答案 1 :(得分:1)

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

B

产地:

$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]'));