正则表达式匹配两个 {} 之间的所有内容

Regex match everything between two {}

我在这里查看了不同的答案,但不幸的是 none 对我的情况有好处。所以希望大家不要介意。

所以我需要匹配两个大括号 {} 之间的所有内容,除非匹配以 @ 开头且没有这些大括号,例如:

  1. "This is a super text {match_this}"
  2. "{match_this}"
  3. "This is another example @{deal_with_it}"

这是我的测试字符串,1、2、3 是有效的,而最后一个不应该是:

  1   {eww}
  2   r23r23{fetwe}
  3   #{d2dded}
  4   @{d2dded}

我正在尝试:

(?<=[^@]\{)[^\}]*(?=\})

然后只有第二个和第三个选项匹配(没有第一个) https://regex101.com/r/qRInUf/2/

然后我在尝试:

\{(.*?)\} or [^@]\{(.*?)\}

在这两种情况下,我都无法匹配 1,2,3 值 https://regex101.com/r/uYRtLD/1

提前感谢您的任何建议。

编辑:这是针对 java。

使用这个正则表达式:

(?<!@\{)(?<=\{).*?(?=\})

消极回顾以确保没有 @{,积极回顾以确保 { 和积极回顾以确保 }

在线试用 here

See regex in use here

(?<=(?<!@)\{)[^}]*(?=})
  • (?<=(?<!@)\{) 积极的回顾确保前面的内容与以下内容匹配
    • (?<!@) 负后视确保前面的内容不匹配@字面意思
    • \{ 按字面匹配 {
  • [^}]* 匹配除 } 之外的任何字符任意次数
  • (?=}) 积极的前瞻性确保接下来的内容是 } 字面上的

结果:

{eww}           # Matches eww
r23r23{fetwe}   # Matches fetwe
#{d2dded}       # Matches d2dded
@{d2dded}       # Does not match this because @ precedes {