【问题标题】:RegEx expression needed for BBCode TagBBCode 标签所需的 RegEx 表达式
【发布时间】:2012-03-16 01:50:27
【问题描述】:

我正在将我的论坛转换为 phpBB,他们使用类似的 BBCode 标签,但有一个不同。在旧论坛中引用,格式如下:

老:[quote=prattw]我的文字在这里。[/quote]

新:[quote="prattw"]我的文字在这里。[/quote]

我需要一个正则表达式,它将在 BBCode 块中的用户名周围添加引号。非常感谢!

【问题讨论】:

  • 我认为您正在重新发明轮子。有没有工具可以自动将你的论坛迁移到phpBB?
  • 我找不到从 WebWiz 9.x 到 phpBB 的转换器。我能找到的最好的是将 WebWiz 5 或 6 转换为 phpBB 2。花了一个多星期试图让它工作后,我发现转换器无论如何都是垃圾。即使它确实有效,我仍然必须再次升级到 3。对于论坛的大小,它需要一个多星期才能完全转换。我不能有那种停机时间。我的手版已经完成了 90%,现在只是微调。

标签: regex phpbb bbcode


【解决方案1】:

假设用户名的唯一有效字符是与\w 匹配的字符,即[a-zA-Z0-9_](在Python 中),那么您可以将\[quote=(\w+)\] 替换为\[quote="\1"\]

注意事项:

  • 如果允许您的用户名包含[],这可能会出现严重错误。

    • 您可能很想尝试像\[quote=(.+?)\] 这样的非贪婪任意字符匹配,但对于[quote=Clan[FROZEN] Supahkillah],这将得到匹配Clan[Froze
    • 贪心版更惨。 \[quote=(.+)\] 会匹配太多的 [quote=Alice][quote=Bob]

    记住regexps aren't good at handling nested structures。您可能希望使用解析方法而不是正则表达式方法。 (对于 HTML,这将是“使用 XML 解析器” - 对于本示例,它将是“使用 bbCode 解析器”。)

  • 至少在 Python 中,\w 的含义是依赖于语言环境的。所以对于俄罗斯人来说,\w 也可以匹配 Главное в новостях 之类的东西。

我仍然认为您正在尝试重新发明轮子。有可能存在一个脚本来自动将您的旧论坛格式转换为 phpBB - 您只需寻找它。

【讨论】:

  • 非常感谢!用户名都是普通的字母数字英文名称,所以这应该很好用。
  • 作为健全性检查,您可能希望将所有用户名转储到文本文件 (SELECT username FROM users?) 并检查 only 字符是否为 [a-zA-Z0-9_]。空格和破折号很常见(即我的用户名)。
  • 重新考虑,而不是\w,使用否定字符类[^\[\]] 可能会更好,它可以匹配除[] 之外的任何内容。那么使用贪心匹配应该是安全的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
  • 2018-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多