首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# RegEx防止相同模式重复的贪婪匹配

C# RegEx防止相同模式重复的贪婪匹配
EN

Stack Overflow用户
提问于 2013-08-06 21:56:05
回答 2查看 178关注 0票数 5

在实现一个小的脚本解析器时,我遇到了这个代码示例的问题--想要只选择"if { }“语句之间的部分并包括”if{}“语句,这是贪婪的,并且选择了包括最后一行在内的所有语句。我想我应该使用的是一个负向先行。

代码语言:javascript
复制
if [condition1]
{
  task1
  setparameters{a}
  task2
}

if [condition2]
{
  task3
}

setparameters{b}

目前,我有:

代码语言:javascript
复制
if\b\s\[.*\]\s\{(\s|.)*\}

我猜这也不像打破另一个“如果”那么简单,因为在那之前可能会有其他事情发生。可以计算相同数量的左大括号和右大括号吗?或者,有没有其他神奇的方法可以让我只选择其中一个“if”语句?

EN

回答 2

Stack Overflow用户

发布于 2013-08-06 23:25:42

当我尝试检测SQL字符串(可能有转义引号)时,我遇到了类似的问题,尝试使用正则表达式:if.*?\{(\{.*?\}|[^}])*+\}

它将匹配一个if,然后是condition,直到第一个{,然后如果它遇到{} 之间的任何东西,或者任何不是}的东西,它都将继续匹配,然后是最后的结束}

我使用了所有格量词来防止灾难性回溯的可能性。

票数 2
EN

Stack Overflow用户

发布于 2013-08-06 22:08:12

使用"?“作为限定符,表示"*“非贪婪。实际上,使用“+”可能更好:

\[.+?]

正如@It‘’sNotALie所说(转述),你会从一些解释中受益:

A sample of a nice tutorial

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18082248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档