我想在文件中匹配多次次的代码块,但无法使用正则表达式来执行此操作。代码块的一个例子是:
//@debug
...
// code in here
...
//@end-debug (possibly more comments here on same line)
我尝试匹配的每个代码块都以//@debug
开头,并停在包含//@end-debug
我现在有这个:
/(\/{2}\@debug)(.|\s)*(\/{2}\@end-debug).*/
但是这会匹配从第一个//@debug
到文件中最后一个//@end-debug
行末尾的一个大块。
有什么想法吗?
答案 0 :(得分:6)
基本上你的正则表达式是贪婪的。这意味着通配符操作符可以根据您看到的结果尽可能多地获取。只要在适当的时候将其改为非贪婪。在您的情况下使用:
/(/ {2} \ @调试)(| \ S)?*(/ {2} \ @端调试)* /
答案 1 :(得分:1)
您也不必使用(.|\s)
hack,但正确方法的语法取决于您使用的语言或工具。在Perl或Javascript中,您可以这样做:
/\/\/@debug.*?^\/\/@end-debug[^\r\n]*/sg
/s
修饰符让点匹配回车符和换行符,从而产生更容易阅读且更高效的正则表达式。这也意味着我必须将第二个.*
更改为[^\r\n]*
,但这是值得的。 /g
修饰符可以让正则表达式多次匹配(即“全局”)。
答案 2 :(得分:0)