Regex 正则表达式匹配括号内包含其他字符的字符集

Regex 正则表达式匹配括号内包含其他字符的字符集,regex,Regex,给定foo-bar-monkey[foo-bar-monkey]foo-bar-monkey,您如何仅匹配括号内的bar \[(bar)+\]是我从理解和研究的角度所能得到的最接近的结果(括号是匹配的,然后我们只选择括号内的确切文本1次或多次),但是它与我想要的内容不匹配\[(.*)+\]匹配括号中的所有内容,包括括号,但无论我尝试什么,我似乎都无法将其筛选为仅条 编辑:我正在JetBrains IDE中使用目录中的替换函数。我不确定他们使用什么语言来处理正则表达式。试试看 .*\[[^]]*?

给定
foo-bar-monkey[foo-bar-monkey]foo-bar-monkey
,您如何仅匹配括号内的
bar

\[(bar)+\]
是我从理解和研究的角度所能得到的最接近的结果(括号是匹配的,然后我们只选择括号内的确切文本1次或多次),但是它与我想要的内容不匹配<代码>\[(.*)+\]匹配括号中的所有内容,包括括号,但无论我尝试什么,我似乎都无法将其筛选为仅

编辑:我正在JetBrains IDE中使用目录中的替换函数。我不确定他们使用什么语言来处理正则表达式。

试试看

.*\[[^]]*?(bar)[^[]*?\].*
只要它在某些括号内,它就应该捕获
(条)
两侧的
[^]]*?
/
[^[]*?
需要使用
括号内的其他东西


请注意,这将无法正确处理嵌套括号,只能找到一个
,可能还有许多其他限制。

请检查此项。它工作正常

\[\w*\s(bar)\s\w+\]

JetBrains的IDE是用Java 1.4编写的(其中包括Java 1.4的正则表达式引擎)。有多种方法可以完成您要做的事情,但最简单的方法可能是不使用捕获组。Java支持可变长度lookbehind,只要您不使用
+
*
量词。作为这些不受支持的量词的替换,您可以使用类似
{01000}的内容
替换
*
{11000}
替换
+

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

(?您可能会与

\[(?:(?!]).)*?bar
看。
就是

要捕获
,可以使用

\[(?:(?!]).)*?(bar)

并使用第一组。

要匹配括号内的任何
(通过知道不可能发生不平衡括号),可以使用以下正则表达式:

bar(?=[^\]\[\\]*(?:\\.[^\]\[\\]*)*\])
正则表达式细分

bar     # Match `bar`
(?=     # Starting a positive lookahead, works as If condition
    [^\]\[\\]*  # If without matching `]` or `[` or `\`
    (?: # Start of non-capturing group #1
        \\.[^\]\[\\]* # Repeat last pattern in addition to matching escaped chars
    )*  # Many times, end of NCG #1
    \]  # When it ends to `]`
)       # End of lookahead
在如下字符串上运行:

foo bar monkey [foo bar monkey bar foo] foo bar monkey [foo bar monkey bar foo]
将匹配括号内的所有
。您可能希望用
\b
将其括起来,以确保只匹配
字:
\bbar\b


您正在使用什么工具/语言?请指出您正在使用的语言。在任何情况下,您是否尝试过正则表达式
\[.*(bar)。*\]
?尝试@revo我正在JetBrains IDE中进行目录替换。我不确定他们使用什么语言。是否可能存在不平衡括号?
monkey[foo]bar[monkey]foo bar monkey
将匹配我找到的
(?大多数正则表达式引擎不支持可变长度lookbehind。@Leyffda(revo:我不知道我在使用js:/)@lxop您需要跳出第一个关闭钩子。在Java 1.4中不起作用。ctwheels澄清了JetBrains使用的版本,但在php中它确实起作用。当
bar
不是中间词,或者如果
bar
之前有超过1个词,或者如果bar之后没有词,等等,这都不起作用。它只匹配中的第二个词方括号的一侧。@forrestmid是否希望始终匹配
bar
?是的。只有bar,只有在括号中时才匹配。@forrestmid请查看编辑。我更改了正则表达式。这应该适合您。不过最后一个问题是,如果它是另一个词的一部分,例如
bar
,是否要匹配
bar
foo bar monkey [foo bar monkey bar foo] foo bar monkey [foo bar monkey bar foo]