使用正则表达式,查找方括号内的任何文本,忽略前面带有反斜杠(“\”)的文本
Usin Regex, find any text inside square brackets, ignoring the ones with a preceding backlash ("\")
我试图找到一个正则表达式来匹配方括号内的所有文本组,除了前面有反斜杠的那些。为了说明我的观点,给定这段文字:
[#5C9269]\[Go to [size=120%]1[/size] now][/color]
只有组 #5C9269
、size=120%
、/size
和 /color
会匹配,忽略带有前反斜线字符的组 Go to [size=120%]1[/size] now
。
我在这个问题上的最佳尝试是使用以下正则表达式 /([^\])\[([^{}]*?)\]/
,寻找前面没有反冲的情况并捕获两组中的目标文本,但此表达式无法捕获开头的有效匹配项这条线,因为它们前面没有字符,就像我之前的例子一样。
在您的模式中,您匹配的是字符串开头的字符 ([^\])
,预计会出现。
您可以使用否定后视(这是非消耗性的)排除前面的反斜杠。然后在字符 class 排除匹配 [
和 ]
而不是 {
和 }
那么你也可以从 [^{}]*?
中删除非贪婪量词 ?
因为方括号不能穿过结束的那个。
您需要的值在捕获组 1 中。
(?<!\)\[([^][]+)]
说明
(?<!\)
正后视,直接在当前位置 左侧断言没有\
\[
匹配开场
([^][]+)
捕获组 1,匹配除 [
和 ]
之外的任何字符出现 1+ 次
]
匹配结尾]
看到一个regex demo.
如果你还想匹配方括号之间的空字符串,你可以使用 [^][]*
我试图找到一个正则表达式来匹配方括号内的所有文本组,除了前面有反斜杠的那些。为了说明我的观点,给定这段文字:
[#5C9269]\[Go to [size=120%]1[/size] now][/color]
只有组 #5C9269
、size=120%
、/size
和 /color
会匹配,忽略带有前反斜线字符的组 Go to [size=120%]1[/size] now
。
我在这个问题上的最佳尝试是使用以下正则表达式 /([^\])\[([^{}]*?)\]/
,寻找前面没有反冲的情况并捕获两组中的目标文本,但此表达式无法捕获开头的有效匹配项这条线,因为它们前面没有字符,就像我之前的例子一样。
在您的模式中,您匹配的是字符串开头的字符 ([^\])
,预计会出现。
您可以使用否定后视(这是非消耗性的)排除前面的反斜杠。然后在字符 class 排除匹配 [
和 ]
而不是 {
和 }
那么你也可以从 [^{}]*?
中删除非贪婪量词 ?
因为方括号不能穿过结束的那个。
您需要的值在捕获组 1 中。
(?<!\)\[([^][]+)]
说明
(?<!\)
正后视,直接在当前位置 左侧断言没有\[
匹配开场([^][]+)
捕获组 1,匹配除[
和]
之外的任何字符出现 1+ 次
]
匹配结尾]
\
看到一个regex demo.
如果你还想匹配方括号之间的空字符串,你可以使用 [^][]*