这是为什么.+组合可能是邪恶的经典示例。请改用否定字符集:
.+
(\$\{(\b[a-zA-Z0-9]+\b)\})(\[([^]]+)\]) ^^^
您可以在这里尝试。
比较两个表达式的行为:
贪婪地搭配任何东西。对于第二个匹配,正则表达式会贪婪地匹配任何东西。它会匹配所有内容,直到到达字符串末尾为止,然后必须回溯直到找到]。一旦找到a ],它就会停止,因此最终将您[arg1] - ${test2}[arg2]作为匹配项。
]
[arg1] - ${test2}[arg2]
匹配除以外的任何内容]。这里的正则表达式匹配的不是a的任何内容],因此在每一步都要检查下一个是否为a ]。对于第二场比赛,您可以看到,一旦找到],它就会停止。