我正在尝试编写一个正则表达式,它将正确匹配大括号内的所有表达式,但会忽略所有嵌套的出现。我不希望正则表达式导致灾难性的回报。这里有两行(为了可读性添加了换行符):
1) "Пакет {0} требует наличия не менее {features.count} функций компании
{company.name} в городе {company.location.city}"
2) "associated_data = {"package":42, "features":{"count":12, "items":[...]},
"company": "name":"Contoso", "location":{"city":"Saint Petersburg"}}}"
在第一行中,我想匹配:
['{0}', '{features.count}', '{company.name}', '{company.location.city}']
在第二行我想匹配:
['{"package":42, "features":{"count":12, "items":[...]},
"company": "name":"Contoso", "location":{"city":"Saint Petersburg"}}}']
例如,贪婪算法r'(?<!\\)\{.*(?<!\\)\}'在第一行失败,因为它匹配整个内容:
['{0} требует наличия не менее {features.count} функций компании {company.name}
в городе {company.location.city}']
非贪婪的 ( r'(?<!\\)\{[^{}]*(?<!\\)}') 落在第二个上,因为他取:
['{"count":12, "items":[...]}', '{"city":"Saint Petersburg"}']
您可能会问,“Rexx 如何猜测您到底想要什么?”;我会回答 - “正则表达式必须找到在嵌套的最高级别上由正确的大括号对包围的最小表达式。”。
好吧,那是不可能的。我可能会选择这个选项:
我的非递归解决方案最多 4 层嵌套:
常规赛可视化