我需要进行如下大学练习:使用正则表达式验证任何包含两个'a'字符和两个'b'字符或更多字符的单词。我在Pattern
类中创建了以下表达式:
Pattern pattern = Pattern.compile("a{2}b{2,}");
此模式仅验证以两个“a”字符开头,然后是两个或更多“b”字符的表达式。但练习要求两个字符a可以在句子中的任何位置,而不一定在开头,以及'b'字符。我该如何做这个正则表达式
答案 0 :(得分:4)
解决强>
(a.*){2}b.*b|(b.*){2}a.*a|(a.*b|b.*a){2}
<强>解释强>
(a.*){2}b.*b
在a
后跟a
后,搜索b
后跟b
的句子。
(b.*){2}a.*a
在b
后跟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,}
可以按任何顺序排列?还有其他字符a
和b
吗?)