[英]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.