2013-10-09 149 views
4

如果字符串以輔音開頭,我想返回true。我有兩個條件,不知道如何組合它們。結合兩個正則表達式

1)它是一個字母 2)它不是一個元音

!!(s[0] =~ /([a-z]&&[^aeiou])/i) 

我試過各種其他的語法,如:

!!(s[0] =~ /([a-z])([^aeiou])/i) 
!!(s[0] =~ /(([a-z])([^aeiou]))/i) 

,有沒有辦法在一個做到這一點正則表達式?我是否需要分別檢查每個條件?

+1

最近這些「輔音」的問題是什麼?例如,「[使用正則表達式來檢查一個字符串是否以輔音開頭](http://stackoverflow.com/questions/18406509/using-regexp-to-check-whether-a-string-starts-with-a-輔音)「 和」[如果使用正則表達式在紅寶石](http://stackoverflow.com/questions/19214270/if-statement-in-ruby-using-regex)「。還有更多,如果你[搜索堆棧溢出](http://stackoverflow.com/search?q=%5Bruby%5D+consonant)。 –

回答

8

可以使用&&操作相結合的字符類:

/[a-z&&[^aeiou]]/ 

注意,&&運算符用於角色職業,而不是事後。

documentation

字符類可以含有其它字符類。本身這個 是沒有用的,因爲[a-z[0-9]]描述了與[a-z0-9]相同的集合。 但是,字符類別也支持運算符,它在其參數上執行集合交集。這兩個可以組合爲 如下:

/[a-w&&[^c-g]z]/ # ([a-w] AND ([^c-g] OR z)) 
# This is equivalent to: 
/[abh-w]/ 
+0

爲什麼它不等於'/ [abh-wz] /'這個語句結束? 'z'發生了什麼事?爲什麼當它不是否定類('[^ c-g]')的一部分時被排除? – iconoclast

+0

@iconoclast,因爲它是'[a-w]'和'[[^ c-g] z]'之間的交集。請注意評論中的括號。 – Stefan

3

您可以使用前視來檢查字符串是否以字母和輔音開頭。

\A(?=[^aeiou])(?=[a-z]) 

或者使用負面展望。

(?i:(?![aeiou])[a-z]\w*) 
+0

打我吧。您需要根據預測的結果進行匹配(例如'.'或'\ w'),然後將預見結合起來,就像'&&'一樣。另外,諸如「(?![aeiou])」這樣的負面前瞻功能可以被稱爲「非與否」。 – iamnotmaynard

1
/^[bcdfghjklmnpqrstvwxyz]/i 

並不比票友選擇更長的時間。