Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 仅从字符串中检索给定的单词_Java_Regex_String - Fatal编程技术网

Java 仅从字符串中检索给定的单词

Java 仅从字符串中检索给定的单词,java,regex,string,Java,Regex,String,我正在处理布尔查询,例如: Information mining AND retrieval OR position 我想创建两个数组或列表,其中一个包含术语(术语可以有大写字母),术语可以有短语查询,即多个单词 {Information mining, retrieval, position} 第二个数组将包含关键字 {AND, OR} 所以我可以用它们的布尔运算符映射相关的搜索词 我使用regex“AND | NOT | OR” 我想不出从给定字符串创建第二个数组的方法 我可以使用什么

我正在处理布尔查询,例如:

Information mining AND retrieval OR position
我想创建两个数组或列表,其中一个包含术语(术语可以有大写字母),术语可以有短语查询,即多个单词

{Information mining, retrieval, position}
第二个数组将包含关键字

{AND, OR}
所以我可以用它们的布尔运算符映射相关的搜索词

我使用regex“AND | NOT | OR”
我想不出从给定字符串创建第二个数组的方法


我可以使用什么正则表达式来获得结果?

您可以使用如下正则表达式:

([A-Z][a-z\s]+)|([A-Z]+)
 ^^^^^^^^^^^^^     ^--- Capture wey words
      +--- Capture regular words

正如您在下面看到的,您的组1将捕获单词,而组2将捕获关键字

匹配信息

MATCH 1
1.  [0-11]  `information`
MATCH 2
2.  [12-15] `AND`
MATCH 3
1.  [16-25] `retrieval`
MATCH 4
2.  [26-28] `OR`
MATCH 5
1.  [29-37] `position`

使用
Matcher#find
代替拆分。阅读@Pshemo,我查找了它,它只返回布尔值。我需要一个数组。有没有一种方法可以使用Matcher类获取数组?请看一看,尤其是这一部分,以了解如何使用Matcher查看已创建的部分。问题是术语也可以有大写字母,例如“信息、检索和位置”。对不起,如果不清楚的话。我将更新我的问题。@xool您可以使用这个正则表达式,然后
([A-Z]?[A-Z]+)|([A-Z]+)
忘记提到术语也可以有短语查询,即多个单词。这就是为什么我不能使用简单的空格分隔符的原因。太完美了!非常感谢。