我在这里看到了不同的答案,但遗憾的是,这些答案都不适合我的情况。所以我希望你不要介意它。
所以我需要匹配两个大括号{}之间的所有内容,除非匹配以@开头但没有这些大括号的情况,例如:
以下是我的测试字符串,1,2,3有效,而最后一个不应该是:
1 {eww}
2 r23r23{fetwe}
3 #{d2dded}
4 @{d2dded}
我正在尝试:
(?<=[^@]\{)[^\}]*(?=\})
然后只有第2和第3个选项匹配(没有第一个) https://regex101.com/r/qRInUf/2/
然后我在尝试:
\{(.*?)\} or [^@]\{(.*?)\}
在这两种情况下,我都无法匹配1,2,3值 https://regex101.com/r/uYRtLD/1
提前感谢任何建议。
编辑:这是针对java。
答案 0 :(得分:6)
(?<=(?<!@)\{)[^}]*(?=})
(?<=(?<!@)\{)
正向后视确保先于下列内容匹配的内容
(?<!@)
负面的背后隐藏,确保先前不会匹配@
字面上\{
按字面意思匹配{
。[^}]*
匹配除}
以外的任何字符(?=})
确保以下内容的正向前瞻}
字面意思结果:
{eww} # Matches eww
r23r23{fetwe} # Matches fetwe
#{d2dded} # Matches d2dded
@{d2dded} # Does not match this because @ precedes {
答案 1 :(得分:3)