正则表达式匹配包含其他字符的2个不同字符串中的字符串

时间:2018-02-20 18:26:04

标签: regex jetbrains-ide

鉴于bar(alvin the chipmunk dude)chipmunk(alvin the chipmunk dude),您如何仅在“条形码”功能上匹配单词“chipmunk”?

我刚问过的另一个问题,但没有我想要的复杂性,回答here。考虑到@revo问题的答案,我不认为这是重复的。那个答案确实回答了另一个问题,但我认为无法调整它以确保匹配包含在两个不同的字符串中(“bar(”和“)”)。

chipmunk(?=[^\)\(\\]*(?:\\.[^\)\(\\]*)*\))(由@revo提供)在括号内匹配“chipmunk”,但我想将其限制在“bar(”和“)”中。

Test here.

使用使用Java的JetBrains IDE。

1 个答案:

答案 0 :(得分:1)

由于您使用的是Java正则表达式库,因此可以使用constrained-width lookbehind功能:

  

只要匹配字符串的长度落在预定范围内,Java就会接受lookbehind中的量词。例如,(?<=cats?)有效,因为它只能匹配三个或四个字符的字符串。同样,(?<=A{1,10})有效。

您可以使用

(?<=bar\([^()]{0,1000})chipmunk

它匹配紧跟chipmunk之后的任何bar(字符串,后跟除()之外的0到1000个字符。

您可以test it at RegexPlanet.com