簡體   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