用PHP正则表达式将字符串按[%%%]分割

3

嗨,我需要一个preg_split正则表达式,可以在方括号中的子字符串处分割字符串。

这是一个示例输入:

$string = 'I have a string containing [substrings] in [brackets].';

应该提供这个数组输出:
[0]= 'I have a string containing '
[1]= '[substrings]'
[2]= ' in '
[3]= '[brackets]'
[4]= '.'

1
@John,我不理解你的问题。你可以更清晰地表述一下吗?另外,习惯贴上代码片段会有帮助哦。 - millebii
3
这些百分比可能是什么?还有哪些不可能是?能否给出更多的例子? - Arend
嗯,你是指一个带有中间任何内容的“[”和“]”字面值吗?(我怀疑很多混淆可能源于此...) - Wrikken
1
可能的代码实现是 $result = preg_split('/\s\[[^\]]{3,}\]\s/',$string),这样可以考虑到[]两侧的空格。或者也可以使用 preg_split('/(\[|\])/',$string) 来得到上述数组。 - Scuzzy
2个回答

7
阅读您修改后的问题后,这可能是您想要的:
这可能符合您的需求:
$string = 'I have a string containing [substrings] in [brackets].';
preg_split('/(\[.*?\])/', $string, null, PREG_SPLIT_DELIM_CAPTURE);

您应该获得:

Array
(
    [0] => I have a string containing 
    [1] => [substrings]
    [2] =>  in 
    [3] => [brackets]
    [4] => .
)

翻译后的答案:

preg_split('/%+/i', 'ot limited to 3 %%% so it can be %%%% or % or %%%%%, etc Tha');

你应该得到:
Array
(
    [0] => ot limited to 3 
    [1] =>  so it can be 
    [2] =>  or 
    [3] =>  or 
    [4] => , etc Tha
)

如果你想要至少三个,那么可以尝试以下方法:

preg_split('/%%%+/i', 'Not limited to 3 %%% so it can be %%%% or % or %%%%%, etc Tha');

试一试 http://regex.larsolavtorvik.com/


2
我认为这正是您在寻找的内容:

我认为这就是您要找的:

$array = preg_split('/(\[.*?\])/', $string, null, PREG_SPLIT_DELIM_CAPTURE);

1
你的意思是 preg_split('/(\[.*?\])/', $string, null, PREG_SPLIT_DELIM_CAPTURE); 吗? - Petah
你也需要括号 () - Petah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接