2012-02-18 2 views
0

자바로 작업하여 100,000 개가 넘는 문자열을 읽습니다. 문자열을 검색하는 키워드 목록을 가지고 있으며 문자열이 있으면 내부 처리를 수행하는 함수를 호출합니다.정확한 패턴을 추출하지 못하는 정규식

키워드의 종류는 "얼굴"입니다. 예를 들어, "페이스 북"이 아닌 "얼굴"과 일치하는 모든 패턴을 얻고 싶습니다. 나는 끈에있는 얼굴 뒤의 공백 문자를 받아 들일 수 있습니다. 그래서 문자열에 "face"또는 "faces"또는 "face"또는 "faces"와 같은 일치를 가질 수 있습니다. 나는 그것을 받아 들일 수도 있습니다. 그러나 나는 "duckface"또는 내가 정규식

Pattern p = Pattern.compile("\\s+"+keyword+"s\\s+|\\s+"); 

키워드가 키워드 내 목록입니다

를 작성했습니다

"duckface"등을 받아 들일 수 없다,하지만 원하는 결과를 얻고 있지 않다. 내 설명을 읽고 문제가 될 수있는 것이 무엇이고 어떻게 해결할 수 있는지 제안 해 주시겠습니까?

또한 정말로 좋은 정규식 자바 페이지에 대한 포인터가 공유되어 있다면 나는 그것을 또한 높이 평가할 것이다.

당신에게 명의 참여자를 감사 ..

편집

나는 나는 다음과 같은 코드를 사용하고 있습니다 작동하지 않습니다 알고 그 이유는이 빈 문자열을 반환

Pattern p = Pattern.compile("\\s+"+keyword+"s\\s+|\\s+"); 
      Matcher m = p.matcher(myInputDataSting); 
      if(m.find()) 
      { 
       System.out.println("Its a Match: "+m.group()); 
} 

을 ...

+0

어떻게 작동하지 않습니까? 어떤 끈이 빠졌습니까? –

+0

대체 옵션을 괄호로 묶어야하지만''s ''옵션을 사용하려면'+ "s? \\ s +"'를 수행하는 것이 더 좋습니다. 또한'+ Pattern.quote (keyword) +'키워드를 사용하십시오. 그렇지 않으면 패턴을 엉망으로 만들 수 있습니다. – Irfy

+0

자주 [this] (http://www.regular-expressions.info/tutorial.html) 사이트를 자습서/참조로 사용합니다. – Vic

답변

4

keyword"face" 인 경우 현재 정규식은

입니다. 하나 개 이상의 공백 문자, 또는 하나 이상의 공백 문자 다음에 faces 다음 하나 이상의 공백 문자와 일치
\s+faces\s+|\s+ 

,. (매우 낮은 우선 순위를 가지고 | 파이프.)

당신이 정말로 원하는 무엇 face 다음 단어 경계를 일치

\bfaces?\b 

이며, 선택적으로 단어 경계 다음에, s 하였다.

그래서, 당신은 쓸 수 있습니다 : (분명히 이것은 단지 단순히 s을 추가하여 복수형을 형성 face 같은 단어에 대한 작동하지만)

Pattern p = Pattern.compile("\\b"+keyword+"s?\\b"); 

.

http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html에서 Java 정규식 지원의 포괄적 인 목록을 찾을 수 있지만 자습서가 많지 않습니다. 이를 위해서는 "정규식 자습서"를 검색하고 추천하는 것을 권합니다. (Java에 한정 될 필요는 없습니다. 대부분의 자습서는 매우과 비슷한 정규 표현식을위한 것입니다.)

0

당신은

패턴 P =는 Pattern.compile ("\ B를"+ 키워드를 사용해야 + "의 \ B?");

, 여기서 키워드는 복수가 아닙니다. \\ b는 키워드가 검색 문자열에서 완전한 단어 여야 함을 의미합니다. 에스? 키워드의 값이 s로 끝날 수 있음을 의미합니다.

정규식에 익숙하지 않은 분은 예제와 설명이 있으므로 http://docs.oracle.com/javase/tutorial/essential/regex/index.html을 읽어 보시기 바랍니다.

관련 문제