正则表达式匹配两个 {} 之间的所有内容
Regex match everything between two {}
我在这里查看了不同的答案,但不幸的是 none 对我的情况有好处。所以希望大家不要介意。
所以我需要匹配两个大括号 {} 之间的所有内容,除非匹配以 @ 开头且没有这些大括号,例如:
- "This is a super text {match_this}"
- "{match_this}"
- "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。
(?<=(?<!@)\{)[^}]*(?=})
(?<=(?<!@)\{)
积极的回顾确保前面的内容与以下内容匹配
(?<!@)
负后视确保前面的内容不匹配@
字面意思
\{
按字面匹配 {
。
[^}]*
匹配除 }
之外的任何字符任意次数
(?=})
积极的前瞻性确保接下来的内容是 }
字面上的
结果:
{eww} # Matches eww
r23r23{fetwe} # Matches fetwe
#{d2dded} # Matches d2dded
@{d2dded} # Does not match this because @ precedes {
我在这里查看了不同的答案,但不幸的是 none 对我的情况有好处。所以希望大家不要介意。
所以我需要匹配两个大括号 {} 之间的所有内容,除非匹配以 @ 开头且没有这些大括号,例如:
- "This is a super text {match_this}"
- "{match_this}"
- "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。
(?<=(?<!@)\{)[^}]*(?=})
(?<=(?<!@)\{)
积极的回顾确保前面的内容与以下内容匹配(?<!@)
负后视确保前面的内容不匹配@
字面意思\{
按字面匹配{
。
[^}]*
匹配除}
之外的任何字符任意次数(?=})
积极的前瞻性确保接下来的内容是}
字面上的
结果:
{eww} # Matches eww
r23r23{fetwe} # Matches fetwe
#{d2dded} # Matches d2dded
@{d2dded} # Does not match this because @ precedes {