正则表达式删除多行注释
Posted
技术标签:
【中文标题】正则表达式删除多行注释【英文标题】:REGEX to remove multiline comments 【发布时间】:2014-03-18 11:09:23 【问题描述】:我已经搜索了很多,到目前为止我创建的与多行 c cmets 匹配的最好的是:
\/\*(.|\n)*\*\/
但是对于这样的文本:
1. Not a comment
2.
3.Ooops Not a comment /**** A multiline comment **/ Ooops Not a comment
4. Ooops Not a comment /**** A multiline comment **\/
5. ****** Ooops Not a comment
6. ***/
7.// A another comment
8.Another not a comment
9.
10. "/*Again not a comment*/"
11.// A line comment at the end of file
The outcome looks like this:
1. Not a comment
2.
3.Ooops Not a comment "
11.// A line comment at the end of file
有人可以解释我的错误并给我正确的吗?谢谢!
完整代码: [剧透]
%option noyywrap
%
#include <stdio.h>
#include <stdlib.h>
FILE *fout;
%
%%
\/\*(.|\n)*?\*\/
%%
void main( int argc, char ** argv)
if ( argc < 3 )
printf("\nError!!! Missing Command line arguments");
printf("\nUsage exe <inputfile> <outputfile>");
exit(1);
else
fout = fopen(argv[2],"w");
yyout = fout;
yyin = fopen(argv[1],"r");
yylex();
system("pause");
[/剧透]
【问题讨论】:
重复。见:Improving/Fixing a Regex for C style block comments 【参考方案1】:尝试添加?
使其不贪婪:\/\*(.|\n)*?\*\/
。
匹配:
/**** A multiline comment **/
/**** A multiline comment **\/ 5. ****** Ooops Not a comment 6. ***/
/*Again not a comment*/
如果这些匹配不正确,请更好地解释应该匹配什么。
【讨论】:
感谢您的宝贵时间 :) 。没有任何改变,tt给了我同样的结果。顺便说一句,这是我第一次看到放一个?在 * 之后。 是的,tenub 这些正是我希望它匹配的,但由于某种原因它不匹配:/ 改成/\*(.|[\r\n])*?\*/
怎么样?正斜杠不一定需要转义,除非它是您的 RegEx 分隔符。
我在在线正则表达式测试器上尝试了您的表达 \/*(.|\n)*?*\/ 并且它是正确的。也许正则表达式在不同的情况下是不同的?我正在使用 Visual Studio 2008(flex 和 bison),我在 .l 文件上运行它们(我必须使用这种方式,因为这就是教授的要求)。 /*(.|[\r\n]) *?*/ 给出 Error 1 错误 PRJ0019: A tool returned an error code from "Generating lexical analyser..." Project3 Project3
您正在运行什么完整代码来实现此 RegEx 并返回匹配项?您可以编辑原始问题以包含此代码吗?以上是关于正则表达式删除多行注释的主要内容,如果未能解决你的问题,请参考以下文章