如何用java正则表达式解析中文的meta关键字?

时间:2012-03-03 03:38:12

标签: java regex

我有下面的代码,但看起来它以错误的方式解析中文的关键字。我怎么能改变它?

输出:

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

应该在下面:

keyword:test
keyword:中文
keyword:UI
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);
      }

}

谢谢!

2 个答案:

答案 0 :(得分:2)

问题不在于汉字,问题在于两个字符长的关键字。 (这也是它影响UI的原因。)这个正则表达式:

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

允许两种可能性:

[^\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);

答案 1 :(得分:1)

你的正则表达式应该是\\w来匹配单词。这应该产生所需的输出。

此外,有人建议爆炸:Apache Commons