如何不使用^和$运算符实现匹配无小写元音的正则表达式?
可行的解决方案
可以实现,你需要用负向前瞻断言来确保整个输入中不存在小写元音,同时匹配全部内容。对应的正则表达式是:
(?!.*[aeiou]).*
为什么你之前的尝试失败
你写的[b-df-hj-np-tv-z]*只是匹配一串非元音字符,但正则引擎默认是部分匹配——它会在输入字符串中找到任何符合模式的子串就返回匹配结果,所以"usa"里的s会被匹配,这不符合你需要匹配整行的要求。
新正则的工作原理
(?!.*[aeiou]):这是一个负向前瞻断言,它会检查从当前位置(字符串开头)开始,后续的所有字符(.*)中不存在任何小写元音[aeiou]。如果存在元音,断言失败,整个正则不匹配。.*:当断言通过后,这部分会匹配整个字符串的所有字符(包括空字符串,和原正则的行为一致)。
这样整个正则就实现了和^[^aeiou]*$完全相同的功能,且没有使用^和$锚点。
内容的提问来源于stack exchange,提问作者Aman Bubna
相关产品推荐
相关产品推荐

