2015-02-07 102 views

回答

1

在匹配每个单个字符之前,检查是否为aaa。这可以通过负面预测断言来完成。

String line[] = {"GAASSCC", "EAAASCS", "AAASDAA", "ASBSAA" }; 
for (String i : line) 
    if(i.matches("(?i)^(?:(?!aaa).)*?(?<!a)aa(?!a).*")) 
    { 
     System.out.println(i +" -> Good"); 
    } 
    else 
    { 
     System.out.println(i +" -> Bad"); 
    } 

输出:

GAASSCC -> Good 
EAAASCS -> Bad 
AAASDAA -> Bad 
ASBSAA -> Good 

说明:

  • (?i)

    称为不区分大小写的改性剂。这使得正则表达式可以匹配大写和小写字母。

  • ^断言我们是在开始。

  • (?:(?!aaa).)*?这里是棘手的部分。首先检查不是aaa。如果没有a而后面没有两个a字符,则只有相应的字符会匹配。

  • (?<!a)此断言,我们要匹配字符串不会被字符a

  • aa匹配字符串aa

  • (?!a)负先行断言它前面的比赛不会后面跟着字符a

0

您可以用至少3个A的中筛选出所有单词一排此:

\b\w*[aA]{3,}\w*\b 

说明:

\b:字边界。基本上,一个词的开始或结束。

\w*:任意数量的字母。所以零或更多。

[aA]:要么a或A

{3,}:三个或更多次前一元素([aA]

所以这个发现,具有至少三个A的行中的所有词语,通过任何数量的包围其他信件。

如果您希望按顺序查找包含一个或两个A的单词,则可以将上述内容修改为\b\w*[aA]{1, 2}\w*\b。实际上,您也可以使用\b\w*[aA]+\w*\b,因为您已经过滤了三个或更多个A的单词。

0

也许这样会工作:

[^aA]*[aA]{2}[^aA]*