正则表达式 - 如何在特定块中查找文本?
我是新来正规表达式,并希望使用一个来搜索我们的源代码管理,以查找特定枚举值后的代码块中的文本。即:正则表达式 - 如何在特定块中查找文本?
/(\/{2}\@debug)(.|\s)*?(\/{2}\@end-debug).*/
var junk = dontWantThis if (junk) {dont want this} if (**myEnumValue**) **{ var yes = iWantToFindThis if (true) { var yes2 = iWantThisToo } }**
var junk2 = dontWantThis if (junk) {dont want this}
var stuff = dontWantThis if (junk) {dont want this} if (enumValue) { wantToFindThis }
var stuff = iDontWantThis if (junk) {iDontWantThisEither}
我知道我可以使用(\{(/?[^\>]+)\})
找到,如果块,但我只想要第一个代码块无所不包跟随我在寻找枚举值。我还注意到使用(\{(/?[^\>]+)\})
为我提供了第一个{
和最后的}
,它不会将随后的{}
分组。
谢谢!
添
正则表达式根本无法处理这种东西。为此,你需要一个解析器和扫描器。
只看我的旧问题,我最终创建了一个解析器,我今天仍然使用它。谢谢你的回答。 – Tim 2011-11-15 16:07:35
正如其他人在暗示,这是数学上是不可能做到与正则表达式(至少一般;你也许能得到它,如果你有非常专业的情况下工作)。如果你想要使用标准的Unix工具,或者只是去Perl,Python,Ruby等等,建立你需要的词法分析,可以尝试使用lex和awk的组合来获得想要的结果。
虽然嵌套问题,你可以使用回溯和前瞻,有效地算你匹配括号或引号。这不是正则表达式的一部分,但已被添加到许多正则表达式库中,例如.NET,Perl和Java中的一个;可能更多。我不会建议你走这条路,因为你会发现从词法上解析这个更容易。但是,如果你确实尝试了这个作为一个快速修复,绝对收集一些测试用例,并通过regexbuddy或expresso运行它们。
嵌套问题,因为你不再有一个正规的语法,因此不会用正则表达式解决这个问题 – annakata 2009-09-11 19:32:36