我需要从方括号内有额外文本的长字符串中提取文本:
[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]
)
)
怎么做?
答案 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
)
)