模式Java - 正则表达式

时间:2017-03-02 11:35:33

标签: java regex pattern-matching

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

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

此模式仅验证以两个“a”字符开头,然后是两个或更多“b”字符的表达式。但练习要求两个字符a可以在句子中的任何位置,而不一定在开头,以及'b'字符。我该如何做这个正则表达式

2 个答案:

答案 0 :(得分:4)

解决

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

<强>解释

(a.*){2}b.*ba后跟a后,搜索b后跟b的句子。

(b.*){2}a.*ab后跟b后,搜索a后跟a的句子。

(a.*b|b.*a){2}搜索a后跟b ou b,然后是a

答案 1 :(得分: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吗?)