繁体   English   中英

带Ruby的小写BBCode标签

[英]Downcase BBCode Tag with Ruby

我正在尝试掩盖BBCode标签大写的论坛。 我需要编写一个解析器来将我的标签从[QUOTE]转换为[quote],从[/ QUOTE]转换为[/ quote],等等。

我这样写:

string.gsub(/#\[(.*?)\]/, ' \1'.downcase)

但是当然不行!

我该如何解决?

  • 您的#错误。
  • 您不需要使用捕获(通过放入() )。 您可以参考整个比赛。 []/将保留为downcase ,因此包括它们在内不会造成任何伤害。 实际上,您的正则表达式可能已经在捕获中包含了/ ,因此从捕获中仅排除[]是没有意义的。
  • 您的'\\1'.downcase无效,因为它等效于'\\1' 要在比赛中执行方法,您需要一个块。
  • 我假设您是.*? 在正则表达式中,它打算正确捕获嵌套的括号,但这只能成功一半。 如果您有"[foo [bar] baz]" ,则通过\\[(.*?)\\]可以避免匹配"[foo [bar] baz]""[bar] baz]" ,但仍然mathces "[foo [bar]" 那么.*? 没有意义。

考虑到以上几点,如果需要考虑嵌套方括号,可以执行以下操作:

string.gsub(/\[[^\[\]]+\]/, &:downcase)

除此以外,

string.gsub(/\[.+\]/, &:downcase)

您可以使用gsub的块版本来修改匹配项。

 s.gsub(/\[(.+?)\]/) { |match| match.downcase }

或更紧凑的版本

 s.gsub(/\[(.+?)\]/, &:downcase)

另请注意,有一个#阻止正则表达式匹配。

例:

s = "from [QUOTE] to [quote], from [/QUOTE] to [/quote]"
s.gsub(/\[(.*?)\]/, &:downcase)
 => "from [quote] to [quote], from [/quote] to [/quote]" 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM