结合两个正则表达式

时间:2013-10-09 14:18:19

标签: ruby regex syntax

如果字符串以辅音开头,我想返回true。我有两个条件,不知道如何组合它们。

1)这是一封信 2)它不是元音

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

我尝试了各种其他语法,如:

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

有没有办法在一个正则表达式中执行此操作?我是否需要单独检查每个条件?

3 个答案:

答案 0 :(得分:8)

您可以使用&&运算符组合字符类:

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

请注意&&运算符在字符类中使用,而不是之后。

来自documentation

  

字符类可能包含另一个字符类。本身就是这个   没有用,因为[a-z[0-9]]描述了与[a-z0-9]相同的集合。   但是,字符类也支持&&运算符   对其参数执行set intersection。这两者可以合并为   如下:

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

答案 1 :(得分:3)

您可以使用前瞻来检查字符串是否以字母和辅音开头。

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

或使用负面展望。

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

答案 2 :(得分:1)

/^[bcdfghjklmnpqrstvwxyz]/i

比发烧友的选择还要长。