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

标签 java regex

我有下面的代码,但看起来它以错误的方式解析中文关键字。我该如何更改它?

输出:

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

Should be below:

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

This is my code:

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);
      }

}

谢谢!

最佳答案

问题不在于中文字符,问题在于两个字符长的关键字。 (这就是为什么它也会影响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);

关于java - 如何用java正则表达式解析中文元关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9543210/

相关文章:

java - java ab中动态绑定(bind)和签名方法的问题

javascript - 如何从javascript中的rgb字符串中提取颜色值

regex - 正则表达式 "Matching"与 "Capturing"

java - 父类调用子类的静态方法

Ruby:如何在保持定界符和定界符的长度> 1 的同时拆分字符串?

python - 如何在 python 中更改 glob 模块的内部排序系统

php - 如何使用正则表达式替换 PHP 中除第一个字符以外的所有字符?

java - 在java中将树结构从数据库转换为JSON对象?

java - 确定两个 Double 数组的元素顺序是否相同?

java - 由于填充导致的加密问题?