2013-07-22 3 views
12

문자가에 반복되는 단어를 식별 할 수있는 정규 표현식을 작성해야합니다. 다음 코드 단편에 따르면 반복 문자 집합은 An입니다. 이 정규식을 작성하여 표시해야합니다.반복 문자 감지를위한 정규 표현식 작성

다음 코드에 따르면 \\w은 임의의 단어 문자 (숫자, 문자 또는 특수 문자 포함)와 일치합니다. 그러나 나는 영어 문자 만 식별하려고합니다.

String stringToMatch = "IranAnAn"; 
Pattern p = Pattern.compile("(\\w)\\1+"); 
Matcher m = p.matcher(stringToMatch); 
if (m.find()) 
{ 
    System.out.println("Word contains duplicate characters " + m.group(1)); 
} 

UPDATE

Word contains duplicate characters a 
Word contains duplicate characters a 
Word contains duplicate characters An 
+3

"반복"으로 간주되는 문자는 몇 개입니까? '바나나'(유효한 단어 임에도 불구하고)와 '마마'(반복 세트 만 표시)를 표시 하시겠습니까? 'zoo'는 한 문자 반복 또는'tomtom' (세 문자 반복)은 어떻습니까? "단지 영어 문자"의 일치를 원한다면 일치시킬 문자에'[A-Za-z]'를 사용하십시오. – Floris

답변

8

당신은 가능한 한 세트에 많은 문자를 잡으려면, 그래서 대신 (\\w)의 당신이 (\\w+)를 사용해야하고 필요한 있도록, 순서가 마지막에되고 싶어 $을 추가 (내가 삭제 한 + 반복 감지하는 데 유용하지 않은 \\1 후 : 하나의 반복이 필요) :

Pattern p = Pattern.compile("(\\w+)\\1$"); 

그러면 프로그램에서 An을 예상대로 출력합니다.

Pattern p = Pattern.compile("([a-zA-Z]+)\\1$"); 

을 그리고 당신이 원하는 경우에 문자는 2 자 이상으로 설정 :

마지막으로, ASCII 문자를 캡처하려는 경우, 당신은 \\w 대신 [a-zA-Z]을 사용할 수 있습니다

Pattern p = Pattern.compile("([a-zA-Z]{2,})\\1$"); 
+0

아니요 작동하지 않습니다. 나는 내가 준 결과를 더했다. 또한 'a'도 감지합니다. 나는 단지 연속되는 문자들을 탐지하기를 원한다. –

+0

@sharonHwk 잘 모르겠습니다. 나는 'IranAnAn'이란 입력으로'An '을 찾을 거라고 생각했는데 - 그게 당신이 의미하는 것이 아니겠습니까? 업데이트에서 'a'가 반복 문자로 간주되는 이유는 무엇입니까? – assylias

+0

반복되는 'An'을 발견했을 때만 출력하고 싶습니다. 그러나 반복되는 'a'를 발견하면 출력됩니다. –

1

"영어 문자 만"으로 AZ와 az를 의미하는 경우 다음 정규 표현식이 작동합니다.

".*([A-Za-z]{2,})\\1$" 
+0

아니요 작동하지 않습니다. 나는 내가 준 결과를 더했다. 또한 'a'도 감지합니다. 나는 단지 연속되는 문자들을 탐지하기를 원한다. –

+2

[unicode table] (http://unicode-table.com/en/#0060)에는'A'와'z' 사이에'['\']''^''_''와 같은 다른 문자가 있습니다. \''. '[A-Za-z]'가 더 정확합니다. – Pshemo

+0

@Pshemo 입력에 감사드립니다, 나는 그 문제를 인식하지 못했습니다! –