Java正则表达式.获取某些KEYWORDS之间的子字符串

我需要帮助为这个问题创建最好的正则表达式.

我有起始和结束分隔符的组合/集合,我需要在起始分隔符到结束分隔符之间获得所有子字符串/任何单词.

假设这个Delimeters表:

开始|结束

CAT |狗

APPLE |橙子

狮子会|斑马

熊猫|猫

样本输入:

substring1 CAT substring2 substring3 DOG substring4 substring5 CAT substring6
APPLE substring7 substring 8 ORANGE ORANGE substring9 DOG substring10 PANDA
substring11 CAT substring12 DOG substring13 LION substring10 substring11 ZEBRA substring12
CAT substring13 substring14 APPLE substring15 substring 16 ORANGE

输出必须是:

> CAT substring2 substring3 DOG
> APPLE substrin7 substring8 ORANGE
> PANDA子串11 CAT
> LION substring10 substring 11 ZEBRA
> APPLE substring15 substring16 ORANGE

我的正则表达式:

 CAT (.)*? DOG | APPLE (.)*? ORANGE | LION (.)*? ZEBRE |  PANDA (.)*? CAT 

我有问题处理有多个其他起始分隔符出现的字符串.

举个例子:

CAT word1 word2 word3 word4 APPLE word5 word6 word7 DOG 

我知道它会与这个CAT(.)*匹配? DOG但这是错误的,因为子字符串包含一个起始的分隔符.

我只需要一个正则表达式,即如果子字符串不包含任何其他起始分隔符的出现,那么它将获得起始分隔符与其匹配结束分隔符之间的所有单词.

有什么建议吗?谢谢

最佳答案 在这里帮助我们的技术被称为“环视”.

在澄清了nfinium和来自jsobo的反馈后,我更新了我的答案

CAT ((?!(APPLE|LION|PANA)).)*? DOG|APPLE ((?!(CAT|LION|PANDA)).)*? ORANGE|LION ((?!(CAT|APPLE|PANDA)).)*? ZEBRA|PANDA ((?!(APPLE|LION)).)*? CAT

鉴于输入:

substring1 CAT substring2 substring3 DOG substring4 substring5 CAT substring6 APPLE substring7 substring 8 ORANGE ORANGE substring9 DOG substring10 PANDA substring11 CAT substring12 DOG substring13 LION substring10 substring11 ZEBRA substring12 CAT substring13 substring14 APPLE substring15 substring 16 ORANGE  string CAT dkdkdkdkdk CAT dkdkdk dkdkdk ORANGE dkdkdkdk DOG etc. CAT word1 word2 word3 word4 APPLE word5 word6 word7 DOG wordx

它匹配

CAT substring2 substring3 DOG
APPLE substring7 substring 8 ORANGE
PANDA substring11 CAT
LION substring10 substring11 ZEBRA
APPLE substring15 substring 16 ORANGE
CAT dkdkdkdkdk CAT dkdkdk dkdkdk ORANGE dkdkdkdk DOG

具体而言,它与nfinium所示的不符合以下内容

CAT word1 word2 word3 word4 APPLE word5 word6 word7 DOG 

还有你指出的匹配

CAT dkdkdkdkdk CAT dkdkdk dkdkdk ORANGE dkdkdkdk DOG 

你说它应该符合以下要求

CAT substring12 DOG

但我不认为它不应该,因为上面的CAT是结束分隔符

PANDA substring11 CAT

这个正则表达式产生了nfinium的预期结果

请注意,根据nfinium CAT的要求,可以是起始和结束分隔符

CAT | DOG
PANDA | CAT
点赞