在字符类中使用OR的Ruby正则表达式

时间:2013-08-06 22:23:20

标签: ruby regex character-class

在浏览ruby-doc for regular expressions时,我遇到了这个实例&&&操作者:

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

我理解

/[a-w&&[^c-g]]/ 

等同于

/[abh-w]/

因为“^”表示应从正则表达式中排除的符号。

然而,我想知道为什么“z”也不包括在内?为什么等价的正则表达式为NOT:

/[abh-wz]/

我是正则表达式的新手,更不用说Ruby中正则表达式的任何细节了,所以非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

页面明确说:

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

“z”未包含在左侧“AND”项中,因此无法匹配。

请参阅:“所有同时都是苹果,苹果或梨的东西”都不包括梨。只苹果是苹果和(苹果或梨)。同样,a同时位于a-w[^c-g]z,因此匹配; z不在左侧,因此“AND”不满意,因此整个表达式失败。