【问题标题】:Using preg_replace to reformat bbcode使用 preg_replace 重新格式化 bbcode
【发布时间】:2015-07-07 08:20:14
【问题描述】:

我正在制作从 phpbb 到 php native 的论坛,我需要解析一些带有 uid 的 bbcode 标签。这是将其解析为不带 uid 的常规 bbcode 的代码:

$regex = "#\[quote:(.*)=(.*)\](.+)\[/quote:(.+)\]#isU";
$text = "outside sample
[quote:c1891a7ad3]
text with link https://www.facebook.com/groups/35688476100/?fref=ts [/quote:c1891a7ad3]
outside text
[quote:c1891a7ad3="Budi"]
written by me , - budi
[/quote:c1891a7ad3]"
preg_replace($regex,"[quote=$2]$3[\quote]",$text);

但结果不是

"outside sample
    [quote:c1891a7ad3]
    text with link https://www.facebook.com/groups/35688476100/?fref=ts  [/quote:c1891a7ad3]
    outside text
    [quote="Budi"]
    written by me , - budi
    [\quote]"

应该如何修改regex 以产生预期的结果?

【问题讨论】:

  • 您的正则表达式不匹配,因为输入文本 ([\quote:c1891a7ad3]) 和正则表达式模式中的 / 中有反斜杠。修复模式或输入字符串。如果您需要在模式末尾匹配[/quote],请修复输入并尝试"#\[quote:([^]]*)=([^]]*)\](.+)\[/quote:([^]]+)\]#isU" regex。
  • 感谢“\”的错字 xD aaah 感谢您帮助我解决此问题:3 emm.. (.*) 和 ([^]]*) 或反引号之间有什么不同([^]]+) ?无论如何,谢谢 :D 你在哪里学习正则表达式?我想像你一样了解和学习! :D
  • 我上面的评论能解决你的问题吗?
  • 是的!你能回答我的评论吗?
  • 试试这个regex101.com 来玩弄正则表达式(每个正则表达式都有详细解释,您还可以查看标准正则表达式库)。

标签: php regex


【解决方案1】:

您的模式与您测试的实际字符串不匹配。在模式中,/[/quote] 中,在字符串中,\ ([\quote:c1891a7ad3])。

因此,如果您的实际字符串实际上具有 /,那么您只需要修复 (.*) 部分,因为点匹配任何字符(包括 ]),因此即使使用惰性匹配也可能过度匹配。

所以,使用

$regex = "#\[quote:([^]]*)=([^]]*)\](.+)\[/quote:([^]]+)\]#isU";

IDEONE demo

在这个正则表达式中,我使用了一个否定字符类 [^]]*,它匹配 0 个或更多字符而不是 ]。它确保我们只匹配[...] 中的文本。 (.*)matchesc1891a7ad3] text with link https://www.facebook.com/groups/35688476100/?fref,所以我们需要以某种方式限制它。

【讨论】:

  • 如果您需要关于在哪里学习正则表达式的建议,请访问`regular-expressions.info,这里有很多信息。另外,你也可以找到一些regex info on SO
  • 知道了!但是没有关于“#”的解释?我还是不明白
  • 这是一个regex delimiter character,它将正则表达式模式\[quote:([^]]*)=([^]]*)\](.+)\[/quote:([^]]+)\] 与正则表达式标志isU 分开。也可以有其他分隔符,例如/~。对于#,如果我们需要将其作为模式中的文字字符进行匹配,我们需要转义#
  • 不错的信息 :D 感谢您来回答这个问题 :') aku terharu kak
  • 哇,马来人? “我不知所措”,谷歌说。这是我听过的第一个马来语短语:)。
猜你喜欢
  • 1970-01-01
  • 2012-04-01
  • 2012-08-24
  • 2011-06-21
  • 2011-11-29
  • 2013-11-26
  • 1970-01-01
  • 2015-08-31
相关资源
最近更新 更多