在几行 PHP 中提取 bbcode 属性



我在php中有一个字符串。它是在bbcode格式。

我需要获取一个 bbcode 标签的值数组[MSG][/MSG]

user1,2534,1232

user2,343425,4231

user3,234345,1423

user4,253434,123242

user5,251234,1652

$string ="
[MSG='user1, comment: 253434, userid: 1232'] TEXT1[/MSG]
[MSG='user2, comment: 343425, userid: 4231'] 
TEXT2
[/MSG]
[MSG='user3, comment: 234345, userid: 1423']
TEXT3
[/MSG]
[MSG='user4, comment: 253434, userid: 123242']
TEXT4
text 4
text 4
[/MSG]
[MSG='user5, comment: 251234, userid: 1652'] TEXT5[/MSG]
";

这就是我迄今为止所做的,但没有成功。

我只关注这部分[MSG='userx, comment: x, userid: x']

使用下一个正则表达式,但没有成功[MSG='(.|n)*']

您可以使用preg_match_allMSG标签中提取数据,使用以下正则表达式:

[s*MSGs*=s*'s*([^,]+),s+comment:s+([^,]+),s+userid: ([^']+)'s*]

它捕获'之后的所有内容,直到第 1 组中的第一个,;然后是comment:之后的所有内容,直到第 2 组中的下一个,,以及userid:之后的所有内容,直到第 3 组中的收盘'。在 PHP 中:

preg_match_all("/[s*MSGs*=s*'s*([^,]+),s+comment:s+([^,]+),s+userid: ([^']+)'s*]/", $string, $matches);
foreach (array_keys($matches[0]) as $key) {
echo "{$matches[1][$key]},{$matches[2][$key]},{$matches[3][$key]}n";
}

输出:

user1,253434,1232
user2,343425,4231
user3,234345,1423
user4,253434,123242
user5,251234,1652

3v4l.org 演示

最新更新