我需要 preg_match_all() 模式来获取方括号标签内的字符串 PHP

I need preg_match_all() pattern in getting string inside square bracket tags PHP

我想解析一个字符串以获取方括号标记内的值:

[vc_column_text][/vc_column_text]

我在 PHP

中使用 preg_match_all()
$string = '[vc_row][vc_column][/vc_column][/vc_row][vc_row][vc_column width="1/2"][vc_column_text css=".vc_custom_1576642149231{margin-bottom: 0px !important;}"]This is the string I want to fetch[/vc_column_text][/vc_column][/vc_row]`;

我试过这个:

preg_match_all("'[vc_column_text(.*?)](.*?)[/vc_column_text]'", $string, $matches);

但这只是 returns 2-3 个字符的数组:

非常感谢您的帮助:)

如果只想匹配句子,可以先匹配 [vc_column_text 后跟除 [] 之外的任何字符,然后匹配结尾的 ]

然后匹配 0+ 次出现的空白字符,并捕获 1 次或多次出现的除第 1 组中的空白以外的任何字符。

\[vc_column_text[^][]*\]\s*(.+?)\[/vc_column_text]

说明

  • \[vc_column_text 匹配 [vc_column_text
  • [^][]*\] 匹配 [,然后除 [] 之外的任何字符出现 0+ 次并匹配 ]
  • \s* 匹配 0+ 个空白字符
  • (.+?) 捕获组 1,匹配任何字符 1+ 次非贪婪
  • \[/vc_column_text] 匹配 [/vc_column_text]

Regex demo | Php demo

示例代码

$string = '[vc_row][vc_column][/vc_column][/vc_row][vc_row][vc_column width="1/2"][vc_column_text css=".vc_custom_1576642149231{margin-bottom: 0px !important;}"]This is the string I want to fetch[/vc_column_text][/vc_column][/vc_row]';
preg_match_all("~\[vc_column_text[^][]*\]\s*(.+?)\[/vc_column_text]~", $string, $matches);
print_r($matches[1]);

输出

Array
(
    [0] => This is the string I want to fetch
)