Regex 捕获前面的标记引用而不是实际的标记引用

Regex 捕获前面的标记引用而不是实际的标记引用,regex,Regex,我碰到了一堵砖墙,试图根据我们创建的自定义标记选择文本 我想选择以下粗体标记: [AREA ROW,CHNO]您的卡将以欧元计价。[/AREA][AREA UK, 美国,香港]发现,[/AREA] 但使用以下正则表达式: \[AREA\s((.*),\sUS,\s.*)\].*?\[.AREA\] 它正在选择完整的行。我理解它为什么选择整行,但无法找到忽略第一个标记的方法 [AREA ROW,CHNO]您的卡将以欧元计价。[/AREA][AREA UK, 美国,香港]发现,[/AREA] 你能

我碰到了一堵砖墙,试图根据我们创建的自定义标记选择文本

我想选择以下粗体标记:

[AREA ROW,CHNO]您的卡将以欧元计价。[/AREA][AREA UK, 美国,香港]发现,[/AREA]

但使用以下正则表达式:

\[AREA\s((.*),\sUS,\s.*)\].*?\[.AREA\]
它正在选择完整的行。我理解它为什么选择整行,但无法找到忽略第一个标记的方法

[AREA ROW,CHNO]您的卡将以欧元计价。[/AREA][AREA UK, 美国,香港]发现,[/AREA]


你能帮忙吗?

问题是在正则表达式中存在贪心的
*
[AREA\s
,\sUS
之间,它匹配
[AREA\s
,\sUS
之间最长的匹配

您可以使用否定字符类,使其仅在下一个逗号之前匹配:

\[AREA\s[^,]+,\sUS,\s.*?\].*?\[\/AREA\]

谢谢你的回复,虽然我喜欢正则表达式,但我并不经常这样做。谢谢你解释我失败的原因!我现在将把这个逻辑用于其他表达式。非常有用。