2017-03-02 87 views
3

我需要进行如下的大学练习:使用正则表达式验证任何包含两个'a'字符和两个'b'字符或更多字符的单词。我在Pattern类做了如下的表达式:模式Java - 正则表达式

Pattern pattern = Pattern.compile("a{2}b{2,}"); 

该图案仅验证带有两个“a”字符开始,然后两个或两个以上“B”字符的表达式。但是这个练习要求两个角色a可以在句子中的任何地方,而不一定在开头,以及'b'字符。如何做到这一点的正则表达式

+0

你能举几个例子:预计比赛吗? –

+2

不明确的要求。你只有a和b的字符;或者还有什么是允许的? – GhostCat

+0

是否允许使用多个正则表达式?然后,你可以分开你的表情,它应该工作。 – Izruo

回答

3

分辨率

(a.*){2}b.*b|(b.*){2}a.*a|(a.*b|b.*a){2} 

说明

(a.*){2}b.*b搜索具有其次aab其次b后的句子。

(b.*){2}a.*a搜索以下句子:b其次是b,之后是a,然后是a

(a.*b|b.*a){2}搜索a其次b OU b其次a

+0

请添加一些你做了什么的解释,这不是一个正确的答案 –

+3

只有一个条目使用类似'[b]'的字符类有什么意义?那可以写成'b'?! – GhostCat

+0

这不起作用,因为例如第一部分中的'b。*'可能与另一个'a'匹配,这是不允许的。 – Izruo

1

Pattern你得到一个Matcher,它有两个方法:

public boolean matches()

尝试对图案的整个区域相匹配。

public boolean find()

试图找到该模式匹配的输入序列的下一个子。

该方法从匹配器区域的开始处开始,或者如果先前方法的调用成功并且匹配器尚未被重置,则在与先前匹配不匹配的第一个字符处开始。

您可以使用您的原有格局,只是叫find而不是matches

Pattern pattern = Pattern.compile("a{2}b{2,}"); 
Matcher matcher = pattern.matcher(myStringToBeSearchedForPattern); 
if (matcher.find()) { 
    System.out.println("Found!"); 
} 

然而,根据要求,你必须修改你的格局。从你的描述,目前尚不清楚确切的要求是什么(可a{2}b{2,}按任意顺序排列?是否还有其他字符,那么ab?)