2012-03-03 2 views
2

아래 코드가 있지만 중국어로 잘못 구문 분석 된 것으로 보입니다. 어떻게 바꿀 수 있습니까?자바 정규식으로 중국어의 메타 키워드를 구문 분석하는 방법은 무엇입니까?

출력 :

 
keyword:test 
keyword:中 
keyword:文 
keyword:U 
keyword:I 
keyword:素 
keyword:材 

아래해야합니다

public class test { 
    public static final Pattern KEYWORDS_REGEX = 
     Pattern.compile("[^\\s,](?:[^,]+[^\\s,])?"); 
/** 
* @param args 
*/ 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    String keywords = "test, 中文, UI, 素材"; 


     Matcher matcher = KEYWORDS_REGEX.matcher(keywords); 

     while (matcher.find()) { 
     String s = matcher.group(); 
     System.out.println("keyword:" +s); 
     } 

} 

감사 :

 
keyword:test 
keyword:中文 
keyword:UI 
keyword:素材 

이 내 코드입니다!

+0

내가 그냥 http://de.php.net/manual/en/function (사용 [폭발]을 많이 쉬울 것이 경우에 생각 .explode.php). – Kisaro

+0

그것은 PHP가 아닙니다. 자바입니다. – terry

+0

죄송합니다. String.split() then ... 잠자기 시간입니다. – Kisaro

답변

1

정규 표현식은 \\w이어야합니다. 이렇게하면 원하는 출력이 생성됩니다. 누군가가 폭발 제안 또한 이후

: Apache Commons

+0

아니요. '\ w'가 아닌'\\ w '를 의미합니다. 어쨌든,'\ w'는 Java 7의 UNICODE_CHARACTER_CLASS 플래그와 함께 사용되는 경우에만 작동합니다. 그렇지 않으면 Java 'Pattern'클래스가 최소한의 유니 코드 기능에 필요한 [UTS # 18 : Unicode Regular Expressions] (http://unicode.org/reports/tr18/)의 공식 요구 사항을 준수하지 못합니다. 여기서 오류는 그 플래그가 없다면 자바의 반 antillennial '\ w'가 [RL1.2a Compatibility Properties] (http://unicode.org/reports/tr18/#Compatibility_Properties)의 요구 사항을 충족시키지 못한다는 것입니다. – tchrist

2

문제는 한자되지는 문제는 두 문자는 긴 키워드입니다.

[^\s,](?:[^,]+[^\s,])? 

이 두 가지 가능성이 있습니다 :이 정규식 (. 그것뿐만 아니라 UI에 영향을 미치는 이유)

[^\s,]    <-- exactly one character 
[^\s,][^,]+[^\s,]  <-- three or more characters 

그렇게 두 문자 키워드가 일치하지 않습니다, 그래서 그들은 단일 문자 키워드로 분할 취득 .

[^,]+[^,]*으로 변경하여 정규식을 고칠 수는 있지만 위의 Kisaro의 의견에 동의하게됩니다. 난 당신이 Pattern.split를 사용하여 더 나을 거라고 생각 :

private static final KEYWORD_SPLITTER = Pattern.compile("\\s*,\\s*"); 

for(final String s : KEYWORD_SPLITTER.split(keywords)) 
    System.out.println("keyword:" + s); 
+0

고마워, 나 split ("\\ s *, \\ s *"); 나를 위해 일한다! – terry

+0

@terry : 천만에! – ruakh

관련 문제