2015-02-07 2 views
-2

안녕하세요, 저는 'a'또는 'A'로만 2 개의 문자로 단어를 일치시키는 정규식 명령을 찾고 있습니다. 단일 'a'는 괜찮지 만 단어에 3 개 이상 'a'가 서로 잘못 표시되어있을 때.Regex/Java. 'aa'시퀀스로 단어 일치하기

G AA SSCC - 좋은
EAAASCS - 나쁜
AAASD AA - 나쁜
ASBS AA - 좋은 당신은 적어도 3 A의에서 모든 단어를 필터링 할 수 있습니다

답변

1

각 단일 문자와 일치하기 전에 aaa이 아닌지 확인하십시오. 이것은 부정적인 lookahead 어설 션을 통해 수행 될 수 있습니다.

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

  • aa 문자열을 aa

  • (?!a) 부정적 예측과 일치하는 문자가 선행되지 않습니다 주장 그 경기는하지 않습니다 그 다음에 문자가 올 수 있습니다 a

0

이 행 :

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

설명 :

\b : 단어 경계입니다. 기본적으로 단어의 시작 또는 끝.

\w* : 임의의 문자 수. 그래서 0 개 이상.

[aA]는하십시오 또는 A 중 하나는

{3,} : 세 번 이상 선행 요소 ([aA])

그래서이 임의의 수에 의해 둘러싸인 행에 적어도 세 A의있는 모든 단어를 찾아 다른 편지.

그런 다음 하나 또는 두 개의 A가 포함 된 단어를 순서대로 찾으려면 위의 내용을 \b\w*[aA]{1, 2}\w*\b 개로 수정할 수 있습니다. 사실 3 개 이상의 A가있는 단어를 이미 필터링했기 때문에 \b\w*[aA]+\w*\b을 사용할 수도 있습니다.

0

아마도 이것이 작동합니다.

[^aA]*[aA]{2}[^aA]* 
관련 문제