JmG*_*JmG 1 java regex pattern-matching
我有关键字列表:
String[] keywords = {"xxxx", "yyyy", "zzzz"};
String[] another = {"aaa", "bbb", "ccc"};
Run Code Online (Sandbox Code Playgroud)
我正在尝试识别其中一个关键字后面跟一个空格然后跟着一个"另一个"字的文本.
如果我使用:
Pattern pattern = Pattern.compile(keywords+"\\s"+another);
Run Code Online (Sandbox Code Playgroud)
这会在运行时抛出异常:
Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed character class near index 57
[Ljava.lang.String;@3dd4ab05\s[Ljava.lang.String;@5527f4f9
^
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
该错误正确地告诉您,您尝试创建的模式无效.看起来乱码的字符串[Ljava是你传递给它的字符串Pattern.compile().
遗憾的是,Java Arrays没有非常丰富的信息.toString()输出,你在这里所做的实际上是将两个数组连接成字符串,它们Pattern无法正确解析.
但即使你打过电话Arrays.toString(),你仍然无法得到你想要的东西:
Pattern pattern=Pattern.compile(Arrays.toString(keywords)+"\\s"+
Arrays.toString(another));
System.out.println(pattern.pattern());
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)[xxxx, yyyy, zzzz]\s[aaa, bbb, ccc]
这是一个技术上有效但基本上没有意义的正则表达式,它只匹配三个字符的字符串,从一个字符开始,xyz ,后跟一个空白字符,后跟一个字符abc ,.
我建议阅读更多有关正则表达式如何工作的内容; 有很多在线资源可供帮助,一个很好的起点是Java正则表达式课程和模式文档 - 在理解正则表达式尝试做什么之前,你不会走得太远.
然而,作为一个起点,一个正则表达式匹配几个单词之一,后跟一个空格,后跟几个其他单词之一,可能如下所示:
(?:xxxx|yyyy|zzzz)\s(?:aaa|bbb|ccc)
Run Code Online (Sandbox Code Playgroud)
这使用"非捕获组"和逻辑OR运算符|来指定多个潜在匹配.
| 归档时间: |
|
| 查看次数: |
178 次 |
| 最近记录: |