【问题标题】:Ruby gsub functionRuby gsub 函数
【发布时间】:2010-12-31 19:22:07
【问题描述】:

我正在尝试为我的 rails 论坛创建一个 BBcode [code] 标签,但表达式有问题:

param_string.gsub!( /\[code\](.*?)\[\/code\]/im, '<pre>\1</pre>' )

如何获得正则表达式匹配返回的内容([code][/code] 标签之间的文本),并转义其中的所有 html 和其他一些字符?

我试过了:

param_string.gsub!( /\[code\](.*?)\[\/code\]/im, '<pre>' + my_escape_function('\1') + '</pre>' )

但它没有用。它只是将“\1”作为字符串传递给函数。

【问题讨论】:

  • 你试过双引号("\1")吗?
  • 是的,也没有用。

标签: ruby-on-rails ruby regex gsub


【解决方案1】:

您应该注意正则表达式的贪婪行为。所以正确的代码是这样的:

html.gsub!(/\[(\S*?)\](.*?)\[\/\1\]/) { |m| escape_method($1, $2) }

escape_method 然后看起来像这样:

def escape_method( type, string )
  case type.downcase
    when 'code'
      "<pre>#{string}</pre>"
    when 'bold'
      "<b>#{string}</b>"
    else
       string
  end
end

【讨论】:

  • 如您所见,此代码可以扩展为支持每个 BBcode 标签
  • 这是一个很好的建议,应该加快速度。谢谢!
【解决方案2】:

您可以简单地使用"&lt;pre&gt;#{$1}&lt;/pre&gt;" 作为您的重置价值。

【讨论】:

    【解决方案3】:

    这里有人发布了答案,但他们已将其删除。

    我已经尝试了他们的建议,并通过一些小改动使其生效。不管你是谁,谢谢! :)

    在这里

    param_string.gsub!( /\[code\](.*?)\[\/code\]/im ) {|s| '<pre>' + my_escape_function(s) + '</pre>' }
    

    【讨论】:

      猜你喜欢
      • 2013-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-17
      • 2021-10-05
      • 2012-05-09
      相关资源
      最近更新 更多