我正在尝试为字符串构造正则表达式,该字符串应具有以下条件:


它必须至少包含一个元音。
它不能包含三个连续的元音或三个连续的辅音。
它不能包含同一字母的两个连续出现,但'ee'或'oo'除外。


我无法为第二和第三条件构造正则表达式。

例如:
凉亭-已接受,
适用-不被接受,
混音器-不被接受,
退缩-不被接受,
喂养-接受

提前致谢!

编辑:

我的代码:

Pattern ptn = Pattern.compile("((.*[A-Za-z0-9]*)(.*[aeiou|AEIOU]+)(.*[@#$%]).*)(.*[^a]{3}.*)");
Matcher mtch = ptn.matcher("zoggax");

if (mtch.find()) {
        return true;
    }
else
    return false;

最佳答案

以下内容将满足您的需求:

(?=.*[aeiouy])(?!.*[aeiouy]{3})(?!.*[a-z&&[^aeiouy]]{3})(?!.*([a-z&&[^eo]])\\1).*


在Java中:

String regex = "(?=.*[aeiouy])(?!.*[aeiouy]{3})(?!.*[a-z&&[^aeiouy]]{3})(?!.*([a-z&&[^eo]])\\1).*";
System.out.println("bower".matches(regex));
System.out.println("appple".matches(regex));
System.out.println("miiixer".matches(regex));
System.out.println("hedding".matches(regex));
System.out.println("feeding".matches(regex));


印刷品:

true
false
false
false
true


说明:


(?=.*[aeiouy]):至少包含一个元音
(?!.*[aeiouy]{3}):不包含3个连续的元音
(?!.*[a-z&&[^aeiouy]]{3}):不包含3个连续的辅音

[a-z&&[^aeiouy]]az之间的任何字母,但aeiouy都不

(?!.*([a-z&&[^eo]])\1):不包含2个连续字母,除了eo

[a-z&&[^eo]]az之间的任何字母,但eo都不



请参见http://www.regular-expressions.info/charclassintersect.html

07-24 13:36