gpt4 book ai didi

java - 为什么在 Java 中使用正则表达式会在运行时抛出 "Unclosed character class"异常?

转载 作者:行者123 更新时间:2023-11-29 07:48:17 43 4
gpt4 key购买 nike

我有关键字列表:

String[] keywords = {"xxxx", "yyyy", "zzzz"};
String[] another = {"aaa", "bbb", "ccc"};

我正在尝试识别其中一个关键字后跟一个空格,然后是“另一个”字词之一的文本。

如果我使用:

Pattern pattern = Pattern.compile(keywords+"\\s"+another);

这会在运行时抛出一个异常:

Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed character class near index 57
[Ljava.lang.String;@3dd4ab05\s[Ljava.lang.String;@5527f4f9
^

我该如何解决这个问题?

最佳答案

该错误正确地告诉您您尝试创建的模式无效。以 [Ljava 开头的乱码字符串是您传递给 Pattern.compile() 的字符串.

不幸的是,Java 数组没有提供很多信息 .toString()输出,你在这里所做的实际上是将两个数组连接成字符串,Pattern不能希望正确解析。

但即使您调用了 Arrays.toString() , 你仍然得不到你要找的东西:

Pattern pattern=Pattern.compile(Arrays.toString(keywords)+"\\s"+
Arrays.toString(another));
System.out.println(pattern.pattern());
[xxxx, yyyy, zzzz]\s[aaa, bbb, ccc]

这是一个技术上有效但本质上没有意义的正则表达式,它将只匹配以 xyz , 中的一个字符开头的三字符字符串。后跟一个空白字符,再后跟一个来自 abc , 的字符.

我建议阅读更多有关正则表达式如何工作的内容;有很多在线资源可以提供帮助,一个好的起点是 Java Regular Expressions lesson , 和 Pattern documentation - 在您理解正则表达式试图做什么之前,您不会走得太远。

然而,作为起点,匹配几个单词之一、后跟一个空格、后跟几个其他单词之一的正则表达式可能如下所示:

(?:xxxx|yyyy|zzzz)\s(?:aaa|bbb|ccc)

这使用“非捕获组”和逻辑或运算符 |指定多个潜在匹配项。

关于java - 为什么在 Java 中使用正则表达式会在运行时抛出 "Unclosed character class"异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23485608/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com