RegEx捕获BBCode引用用户名和ID

时间:2017-12-31 11:37:46

标签: php regex bbcode

我正在寻找一些正则表达式,它将从BBCode QUOTE标签中捕获用户名和帖子ID。

我只希望文本在用户名后面跟着一个帖子ID时是匹配的,并且是完全形成的QUOTE标签(例如[QUOTE = username; numericalid]

我目前正在使用它:

$matches = preg_match_all('/(\[QUOTE=)(\w*?)(\;)/', $data, $match);

但这与下面的文字中的“QUOTE = Jim”[QUOTE = Bob“相匹配,而不只是”[QUOTE = Bob“。

我也试图只返回用户名和ID,所以理想的回报是“Bob; 20499344”(对于文本中的每个用户名/ ID模式)。

[QUOTE=Bob;204992][QUOTE=Steve;204939][QUOTE=Steve;204938][QUOTE=Steve;204936]Here is some text.

[QUOTE=Jim][QUOTE=Bob;20499344][QUOTE=Bob;203489194][QUOTE=Bob;67235994]some more quote here[/QUOTE][/QUOTE][/QUOTE][/QUOTE][/QUOTE][QUOTE=Bob;204194]

=hello;78967876]

如何正确修改正则表达式?

任何帮助都会很棒!谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用以下正则表达式,然后使用组#1获得理想的回报":

\[QUOTE=([\w ]+;\d+)

[\w ]+查找用户名(由单词字符和空格组成;您可能需要将其更改为实际限制),\d+查找至少一位数。

Small sample code

<?php
$string = "[QUOTE=jim][QUOTE=bob;20499344][QUOTE=bob;203449194][QUOTE=bob;67204994]some more quote here[/QUOTE][/QUOTE][/QUOTE][/QUOTE][/QUOTE][QUOTE=bob;204994]";
$matches = preg_match_all('/\[QUOTE=([\w ]+;\d+)/', $string, $match);
print_r($match[1]);
?>

输出:

Array
(
    [0] => bob;20499344
    [1] => bob;203449194
    [2] => bob;67204994
    [3] => bob;204994
)