Ruby 组合两个正则表达式

Ruby 组合两个正则表达式,ruby,regex,syntax,Ruby,Regex,Syntax,如果字符串以辅音开头,我想返回true。我有两个条件,不知道如何组合它们 1) 这是一封信 2) 它不是元音 !!(s[0] =~ /([a-z]&&[^aeiou])/i) 我尝试了各种其他语法,如: !!(s[0] =~ /([a-z])([^aeiou])/i) !!(s[0] =~ /(([a-z])([^aeiou]))/i) 有没有办法在一个正则表达式中实现这一点?是否需要分别检查每个条件?您可以使用“向前看”来检查字符串是否以字母和辅音开头 \A(?=[^aei

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

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

!!(s[0] =~ /([a-z]&&[^aeiou])/i)
我尝试了各种其他语法,如:

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

有没有办法在一个正则表达式中实现这一点?是否需要分别检查每个条件?

您可以使用“向前看”来检查字符串是否以字母和辅音开头

\A(?=[^aeiou])(?=[a-z])
或者用消极的眼光看未来

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

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

/[a-z&&[^aeiou]]/
请注意,
&&
运算符用于字符类内部,而不是之后

从:

一个字符类可能包含另一个字符类。就其本身而言 没有用处,因为
[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]/

不比更高级的选项长多少。

比我快。您需要按照外观标题添加实际匹配的内容(例如
\w
),然后将外观标题组合起来,就像它是
&
一样。另外,像
(?![aeiou])
这样的消极展望有点像是一个“and not”。最近这些“辅音”问题是怎么回事?例如,“和”。如果你愿意,还有很多。为什么不以它等同于
/[abh wz]/
的语句结束呢?
z
发生了什么事?当它不是否定类(
[^c-g]
)的一部分时,为什么要将其排除在外?@iconoclast因为它是
[a-w]
[[^c-g]z]
之间的一个集合交叉点。注意注释中的括号。
/^[bcdfghjklmnpqrstvwxyz]/i