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]