public class Homework {
public static void main(String[] args) {
String words[] = { "Abendessen", "Affe", "Affen", "aber", "anders", "Attacke", "arrangieren", "Art", "Asien",
"Bund", "Arten", "Biene", "Abend", "baden", "suchen", "A1rten", "Abend-Essen" };
Pattern pattern = Pattern.compile("[aA][a-z[n]+a-z]*");
for (int i = 0; i < words.length; i++) {
Matcher matcher = pattern.matcher(words[i]);
if (matcher.find()) {
System.out.println("OK: " + words[i]);
}
}
}
}
过滤以a或A开头且单词中带有n的单词。这些单词只能由字母组成,并且只有以第二个字母开头的小写字母。 这些单词应匹配:Abendessen,Affen,anders,arrangieren,Asien,Arten,Abend
我已经在上面粗心地尝试过此正则表达式,并认为这也是错误的。
答案 0 :(得分:1)
您当前的模式[aA][a-z[n]+a-z]*
读为:
字符类[aA]
,字符类[a-z[n]+
。然后是a-z]*
,它将与重复进行0次以上的a
,-
,z
和]
相匹配。
例如匹配Abendessena-z]
您可能要做的是以a或A开始比赛,并重复2次[a-z]
0次以上,并确保中间有n
:
\b[aA][a-z]*n[a-z]*\b
说明
\b
字边界[aA]
匹配a或A [a-z]*
匹配a + z超过0次n
匹配n
[a-z]*
匹配a + z超过0次\b
字边界您还可以使用锚点^
和$
来声明字符串的开头和结尾,而不是\b