正则表达式——字符组运算
Posted gaara0305
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式——字符组运算相关的知识,希望对你有一定的参考价值。
以上介绍了字符组的基本功能,它们在常用的语言中都有提供;还有些语言中为字符组提供了更强大的功能,比如Java和.NET就提供了字符组运算的功能,可以在字符组内进行集合运算,在某些情况下这种功能非常实用。
如果要匹配所有的元音字母(为讲解简单考虑,暂时只考虑小写字母的情况),可以用[aeiou],但是要匹配所有的辅音字母却没有什么方便的办法,最直接的写法是[b-df-hj-np-tv-z],不但烦琐,而且难理解。其实,从26个字母中"减去"元音字母,剩下的就是辅音字母,如果有办法做这个"减法",就方便多了。
Java语言中提供了这样的字符组:[[a-z]&&[^aeiou]],虽然初看有点古怪,但仔细看看,也不难理解。[a-z]表示26个英文字母,[^aeiou]表示除元音字母之外的所有字符(还包括大写字母、数字和各种符号),两者取交集,就得到"26个英文字母中,除去5个元音字母,剩下的21个辅音字母"。
.NET中也有这样的功能,只是写法不一样。同样是匹配辅音字母的字符组,.NET中写作[a-z-[aeiou]],其逻辑是:从[a-z]能匹配的26个字符中,"减去"[aeiou]能匹配的元音字母。相对于Java,这种逻辑更符合直觉,但写法却有点古怪--不是[[a-z]-[aeiou]],而是[a-z-[aeiou]]。例1-20集中演示了Java和.NET中的字符组运算。
例1-20 字符组运算
// Java "a".matches("^[[a-z]&&[^aeiou]]$"); // => True "b".matches("^[[a-z]&&[^aeiou]]$"); // => False // .NET Regex.IsMatch("^[a-z-[aeiou]]$", "a"); // => True Regex.IsMatch("^[a-z-[aeiou]]$", "b"); // => False
以上是关于正则表达式——字符组运算的主要内容,如果未能解决你的问题,请参考以下文章
Python 正则表达式转义运算符 \ 在替换和原始字符串中