使用正则表达式,查找方括号内的任何文本,忽略前面带有反斜杠(“\”)的文本

Usin Regex, find any text inside square brackets, ignoring the ones with a preceding backlash ("\")

我试图找到一个正则表达式来匹配方括号内的所有文本组,除了前面有反斜杠的那些。为了说明我的观点,给定这段文字:

[#5C9269]\[Go to [size=120%]1[/size] now][/color]

只有组 #5C9269size=120%/size/color 会匹配,忽略带有前反斜线字符的组 Go to [size=120%]1[/size] now

我在这个问题上的最佳尝试是使用以下正则表达式 /([^\])\[([^{}]*?)\]/,寻找前面没有反冲的情况并捕获两组中的目标文本,但此表达式无法捕获开头的有效匹配项这条线,因为它们前面没有字符,就像我之前的例子一样。

在您的模式中,您匹配的是字符串开头的字符 ([^\]),预计会出现。

您可以使用否定后视(这是非消耗性的)排除前面的反斜杠。然后在字符 class 排除匹配 [] 而不是 {}

那么你也可以从 [^{}]*? 中删除非贪婪量词 ? 因为方括号不能穿过结束的那个。

您需要的值在捕获组 1 中。

(?<!\)\[([^][]+)]

说明

  • (?<!\)正后视,直接在当前位置
  • 左侧断言没有\
  • \[匹配开场
  • ([^][]+) 捕获组 1,匹配除 []
  • 之外的任何字符出现 1+ 次
  • ]匹配结尾]

看到一个regex demo.

如果你还想匹配方括号之间的空字符串,你可以使用 [^][]*