2016-11-07 52 views

回答

2

這是非常直接的,你只需將它們添加到組:?

BRACKETS = /[\{\(\[]/ 

if (char.match(BRACKETS)) 
    # ... 
end 

凡在正則表達式[...]表示一組匹配的單個字符。

爲了測試它的這類型的角色:

BRACKETS = /\A[\{\(\[]\z/ 

現在你的代碼的簡單重構,而無需使用正則表達式是這樣的:

case (char) 
when '{', '(', '[' 
    # ... 
end 

可能會或可能不會比正則表達式快,所以如果性能是關鍵,那麼您可能也想要測試該方法。

+0

你能使用正則表達式':: quote'幫助反斜線? – squiguy

+0

你可以,但手動操作並不是什麼大事。當你處理任意的用戶數據並且你不知道你必須逃脫的時候,這個函數很有用。 – tadman

+1

@squiguy在這種情況下,更好的功能是['Regexp.union'](https://ruby-doc.org/core-2.3.1/Regexp.html#method-c-union),如'Regexp .union('{','[','(')'。 – tadman

2

由於[是一個特殊字符,您必須在正則表達式分組[]中將其轉義。

if char.match /[({\[]/ 
    # Your code here 
end 

如果角色發現#match將返回MatchData對象。否則#match將返回nil如果找不到匹配的字符。

+0

這個例子不匹配,該字符只是一個括號,但該字符串包括一個括號 – idej

1

您可以檢查字符僅與正則表達式支架:

if char[/\A[({\[]\z/] 
    #... 
end 
相關問題