【问题标题】:RegEx capturing BBCode Quote username and IDRegEx 捕获 BBCode Quote 用户名和 ID
【发布时间】:2017-12-31 11:37:45
【问题描述】:

我正在寻找一些正则表达式,它将从 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]

如何修改正则表达式以正确匹配?

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

【问题讨论】:

    标签: php regex bbcode


    【解决方案1】:

    您可以使用以下正则表达式,然后与第 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
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多