2014-04-30 1 views
0

텍스트를 용어집 목록과 대조하려고합니다. 문제는 내 패턴이 한 텍스트에 대해 다른 행동을 보이는 것입니다. ..., 난 단지 정확한 단어 용어와 일치 발견하고, 단어를 찾는 것이 보내고, S로 끝나는 피하려고에만 반환 다음과 같은 패턴 매처와중간에 s, ing 또는 단어로 끝나는 단어를 피하는 일치 자

\nfor Sprints \nSprints \nSprinting \nAccount Accounts Accounting\nSprintsSprints 

: 여기 예를 들어 내 텍스트입니다 내가 스프린트를 시도하는 경우 나 "계정"단어에 대한 정답은, 그러나, 그것은 잘하지 않은 나 스프린트, 스 프린팅 등 반환

private static String findGlossaryTerms(String response, List<Glossary> glossary) { 

     StringBuilder builder = new StringBuilder(); 
     for (int offset = 0; offset < response.length(); offset++) { 
      boolean match = false; 
      if (response.startsWith("<", offset)) { 
       String newString = response.substring(offset); 
       Pattern findHtmlTag = Pattern.compile("\\<.*?\\>"); 
       Matcher matcher = findHtmlTag.matcher(newString); 
       if (matcher.find()) { 
        String htmlTag = matcher.group(0); 
        builder.append(htmlTag); 
        offset += htmlTag.length() - 1; 
        match = true; 
       } 
      } 

      for (Glossary item : glossary) { 
       if (response.startsWith(item.getTerm(), offset)) { 
        String textFromOffset = response.substring(offset - 1); 
        Pattern findTerm = Pattern.compile("(" + item.getTerm() + ")(\\W)",Pattern.DOTALL); 
        Matcher matcher = findTerm.matcher(textFromOffset); 
        if (matcher.find()) { 
         builder.append("<span class=\"term\">").append(item.getTerm()).append("</span>"); 
         offset += item.getTerm().length() - 1; 
         match = true; 
         break; 
        } 
       } 
      if (!match) 
       builder.append(response.charAt(offset)); 

     } 
     return builder.toString(); 
    } 
+1

실제 사례를 넣을 수 있습니까? 정확한 단어와 일치 시키려면 앵커 ('^ $') 또는 경계 ('\ b')를 사용하십시오. –

+0

정확히 내가 얻고있는 문자열의 일부 – user261002

답변

2

: 여기

Pattern findTerm = Pattern.compile("(" + item.getTerm() + ")(\\W)",Pattern.DOTALL); 

와 나의 코드 뭐 귀하의 패턴에 좋은 \\W 무엇입니까? 당신이 정말로 전체 단어 일치되어,

Pattern findTerm = Pattern.compile("(\\b" + item.getTerm() + "\\b)",Pattern.DOTALL); 

그 단어 경계 확인 및 부분 일치하지 않습니다 그냥 단어가 종료되도록 있다면, 대신 word boundaries을 사용합니다.

+0

나는 당신의 제안을 시도한다. 그러나 그것은 여전히 ​​이전과 동일하게 행동한다. – user261002

+0

그런 다음 코드를 디버깅해야한다. 패턴을 컴파일 한 후 패턴을 확인하십시오. – stema

+0

긴 질문에 대한 짧은 답변을 Upvoting. :) – zx81

관련 문제