如何匹配和删除该行的所有评论?我可以从新行开始删除注释,或者使用sed删除不在引号中的注释。但我的脚本在以下示例中失败
This one "# this is not a comment" # but this "is a comment"
可以处理这种情况吗?如果是什么是正则表达式?
示例:
输入:
This one "# this is not a comment" # but this "is a comment"
输出:
This one "# this is not a comment"
答案 0 :(得分:1)
您可以使用直接应用于脚本的Flex等词法分析器。在其手册中,您可以找到" How can I match C-style comments?"而且我认为你可以根据你的问题调整那部分。
如果您需要深入的教程,可以找到它here;根据"词汇分析"您可以找到一个pdf,向您介绍该工具和一个包含一些实际示例的存档,包括" c99-comment-eater",您可以从中获取灵感。
答案 1 :(得分:1)
如果我们假设 # 在引号中或使用反斜杠进行转义时不是注释,那么我们可以定义以下正则表达式:
(ES|RT|QT)*C?
其中
ES - 转义序列:\后跟1个字符
\\.
RT - 非特殊常规文字
[^"\\#]*
QT - 引号中的文字
"[^"]*"
C - 以未转义的,未加引号的哈希符号#开头并以行尾结尾的注释
#.*
使用 sed 的可能解决方案:
sed 's/^\(\(\\.\|[^"\\#]*\|"[^"]*"\)*\)#.*$/\1/'