2012-03-16 106 views
0

我正在将我的论坛转换为phpBB,他们使用类似的BBCode标记,但一个是不同的。要在老论坛报价,它是格式,如:BBCode标记需要RegEx表达

老:[报价= prattw]我的文字在这里了[/ quote]

新:[报价= “prattw”]我的文字在这里[/报价]

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

+0

我认为你正在重新发明轮子。有没有一个工具来自动将论坛迁移到phpBB? – 2012-03-16 01:53:27

+0

我一直无法找到从WebWiz 9.x到phpBB的转换器。我能找到的最好的方法是将WebWiz 5或6转换为phpBB 2.花了一个多星期的时间试图让它工作后,我发现转换器是垃圾。即使它确实有效,我仍然需要再次升级才能达到3.对于论坛的大小,它将花费一周时间才能完全转换。我不能有那种停机时间。我的手版本是90%完成现在只是微调。 – prattw 2012-03-16 01:58:36

回答

0

假设为用户名的唯一有效的字符是那些由\w匹配,即[a-zA-Z0-9_](在Python),然后就可以通过更换\[quote="\1"\]\[quote=(\w+)\]

注意事项:

  • ,如果你的用户名被允许包含[]这可能严重错误。

    • 你可能会去尝试,像\[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 - 您只需要查找它。

+0

非常感谢!用户名都是正常的字母数字英文名称,所以这应该很好。 – prattw 2012-03-16 02:11:30

+0

作为一个完整性检查,您可能想要将所有用户名转储到一个文本文件('SELECT username FROM users'?),并检查** only **字符是否为'[a-zA-Z0-9_]' 。空格和破折号是常见的(即我的用户名在这里)。 – 2012-03-16 02:13:51

+0

第二个想法是,使用否定字符类'[^ \ [\]]',而不是'\ w'而不是'\ w',它可以匹配任何东西但是''''和''''。那么使用贪婪的比赛应该是安全的。 – 2012-03-16 02:14:38