Java 正则表达式-如何匹配一定数量的任意单词,后跟一个特定的单词

Java 正则表达式-如何匹配一定数量的任意单词,后跟一个特定的单词,java,regex,pattern-matching,Java,Regex,Pattern Matching,我想知道是否有人能在这个话题上帮助我,我目前正在尝试做一种模糊匹配 基本上,我不想从非结构化文本中派生关系,也不想识别这些关系的常见模式。尽管如此,输入字符串还是有点随意性——与人工生成的输入一样 例如,这两个输入字符串: 实体通常比实体大 实体是。。。还有几句话。。。大于实体 我已成功地将这两个字符串与以下正则表达式匹配: (实体)大于(实体) 但是自从?匹配所有内容,直到达到更大,在“是”和“更大”之间可以有任意数量的单词。在某些情况下,这会导致错误匹配,因此我想限制介于“is”和“bige

我想知道是否有人能在这个话题上帮助我,我目前正在尝试做一种模糊匹配

基本上,我不想从非结构化文本中派生关系,也不想识别这些关系的常见模式。尽管如此,输入字符串还是有点随意性——与人工生成的输入一样

例如,这两个输入字符串:

实体通常比实体大

实体是。。。还有几句话。。。大于实体

我已成功地将这两个字符串与以下正则表达式匹配:

(实体)大于(实体)

但是自从?匹配所有内容,直到达到更大,在“是”和“更大”之间可以有任意数量的单词。在某些情况下,这会导致错误匹配,因此我想限制介于“is”和“biger”之间的“words”的数量

我将单词定义为至少一个非空白字符,后跟至少一个空白字符。我知道这实际上不是一个词,但就我的目的而言,它应该是好的。如果我想匹配,例如最多5个单词,这将是

(\S+\S+{0,5}

结合前面的正则表达式,我发现

(实体)大于(实体)

但这并不可行。有人能给我一些建议吗?我能把这个和正则表达式匹配吗


这是一个Java项目。为了可读性,我删除了正则表达式模式中的转义反斜杠

这个正则表达式应该适合您:

^(ENTITY) is ((?:\S+\s+){0,5})bigger than \1$

为什么您需要正则表达式中的
(?=biger)
?=biger告诉正则表达式引擎使用所有术语biger之前的内容。我基本上想推导出这两个实体之间的关系“更大”。我想指出的是,因为您的正则表达式在
之前比
更大,所以您不需要进行前瞻,请参见下面的答案。我已经在java文档中查找了这一点。这只告诉我?:启动一个非捕获组。但并没有真正定义非捕获组的功能。您能解释一下吗?非捕获组用于对某些字符进行分组,但不捕获它,因此不可用于以后的反向引用。