正则表达式/ Java的。将字词与' aa'匹配序列

时间:2015-02-07 13:06:02

标签: java regex contains

我正在寻找一个正则表达式命令来匹配只有2个字母'a'或'A'的单词。单个'a'是可以的,但是当单词包含3个或更多'a'时,它们的错误。

G AA SSCC - 好的 EAAASCS - 坏的 AAASD AA - 糟糕
ASBS AA - 好

3 个答案:

答案 0 :(得分:1)

在匹配每个单个字符之前检查aaa的not。这可以通过否定先行断言来完成。

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否定前瞻,声称匹配后面跟着字符{{1}}

答案 1 :(得分: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的单词。

答案 2 :(得分:0)

也许这会奏效:

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