在方括号之间提取文本并在PHP中创建数组

时间:2015-06-10 08:35:12

标签: php arrays regex

我需要从方括号内有额外文本的长字符串中提取文本:

[vc_row][vc_column width="1/1"]28/04/2015 Text description[vc_row][vc_column width="1/1"][vc_row][vc_column width="1/1"]29/04/2015 Text description 2[vc_row][vc_column width="1/1"]

要提取文本并排除方括号内的内容,请应用以下内容:

$page_content = preg_replace("/\[([^\[\]]++|(?R))*+\]/", "", $page->post_content);

直到这里,它才有效。 现在我可以输出我的结果,我看到我的字符串打印在标签中:

<p>28/04/2015</p><h3><a>description</a></h3>
<p>29/04/2015</p><h3><a>description 2</a></h3>

但我需要创建一个我提取的文本数组,如下所示:

Array ( 
     [0] => [28/04/2015] 
     [1] => [description]
     [2] => [29/04/2015] 
     [3] => [description 2] 
)

或者

Array ( 
     [0] => Array (
         [0] => [28/04/2015] 
         [1] => [description]
     )
     [1] => Array (
         [0] => [29/04/2015] 
         [1] => [description 2]
     )
)

怎么做?

2 个答案:

答案 0 :(得分:0)

这样的正则表达式可以帮助你

\](\d{1,2}\/\d{2}\/\d{4})\s([^\[]+)\[

MATCH 1
1.  [31-41] `28/04/2015`
2.  [42-58] `Text description`
MATCH 2
1.  [120-130]   `29/04/2015`
2.  [131-149]   `Text description 2`

There示例

答案 1 :(得分:0)

分支重置\K可以在此处提供帮助:

preg_match_all('~\[(?:[^][]++|(?R))*+\]\K(\d{2}/\d{2}/\d{4})\h+([^[]+)~', $s, $m);
unset ($m[0]);
print_r($m);

Array
(
    [1] => Array
        (
            [0] => 28/04/2015
            [1] => 29/04/2015
        )    
    [2] => Array
        (
            [0] => Text description
            [1] => Text description 2
        )    
)

RegEx Demo