如何排除前面字符与正则表达式中指定的字符不同的字符?

时间:2019-04-15 12:15:56

标签: regex

使用正则表达式,我希望所有字符都放在圆括号之间,但是结果中还应该包含\(\)字符。

示例:

input: fo(ob)a)r
output: ob

input: foo(bar\(qwerty\))baz
output: bar\(qwerty\)

这是我用来在方括号之间查找文本的方法: (?<=\()([^\s\(\)]+)(?=\)),但对于\之前的方括号,我不能例外。

2 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

.*(?<!\\)\((.*?)(?<!\\)\)

基本上,它会匹配尽可能多的字符,直到看到没有反斜杠的开放括号(使用负向后缀),然后将下一个匹配的字符分组,直到右括号(仍然没有反斜杠)。

请注意,如果您转义了反斜杠,则此正则表达式可能无法正常工作。

示例:https://regex101.com/r/BqVKZp/1

答案 1 :(得分:0)

此正则表达式适用于您的两个示例,无需任何先行和后顾之忧:

\((.+[^\\])\)

需要U标志。