【问题标题】:Removing empty bbcode tags using regex使用正则表达式删除空的 bbcode 标签
【发布时间】:2013-05-27 22:55:53
【问题描述】:

我正在尝试使用正则表达式删除空的 bbcode 标签。空我的意思是它们之间没有任何意义:

[tag][/tag]

如果他们之间有什么,那么应该保留它。

我进行了很多搜索并使用了一个正则表达式测试器,但没有想出任何正确的方法。

编辑:我现在知道为什么我在这方面遇到了困难。除了上面的例子,我还有一个是这样的:

[url=http://www.somedomain.com/][/url]

我正在尝试在提交表单时清理 bbcode,因此它没有被存储,因为它是不需要的。

【问题讨论】:

  • 您使用哪种语言? Javascript? PHP?
  • 我在 .NET 中执行此操作。我不确定它与哪个兼容。
  • 更新为包含第二种情况的子集。

标签: regex bbcode


【解决方案1】:

在 Javascript 中,你可以这样做:

str.replace(/\[([^\[\]]*)\]\[\/\1\]/g, '');

【讨论】:

  • 可能想让.* 变得懒惰(.*?),否则您的消耗可能会超出预期。
  • 是的。另外,我将对其进行更改,使其仅匹配不是括号的字符,更加安全。
【解决方案2】:

在这种情况下,正则表达式的操作方面是使用内部反向引用;我不确定这是否得到普遍支持,但无论如何,.NET 似乎使用 PCRE(这是真的吗?)。

那么,模式是[,一个词,][/,同一个词,]。如果我们假设这个词只是具有“不包含]”的性质,那么匹配空标签的适当正则表达式是\[([^\]]+)\]\[/\1\],在上下文中根据需要进行转义。

对于第二种情况,如果采用[tag=arg][/tag] 的形式,并且该标签和参数均不包含任何']'(这不是一个合理的假设!但处理它留给读者作为练习——而且我很确定大多数 bbcode 实现实际上也没有处理这个问题),可以使用正则表达式 \[([^\]=]+)(=[^\]]*)?\]\[/\1\]

【讨论】:

  • 值得牢记的是,我对构成有效标签的假设可能有效,也可能无效;给出的示例更多地是为了说明原理而不是直接使用,尽管它们当然可以。
猜你喜欢
  • 2011-07-27
  • 2018-05-30
  • 1970-01-01
  • 1970-01-01
  • 2019-11-25
  • 1970-01-01
  • 1970-01-01
  • 2010-10-21
  • 1970-01-01
相关资源
最近更新 更多