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