我有几个文本文件,以编程方式包含在我的代码中。我需要一个正则表达式,以便能够从catched字符串中捕获和删除注释的内容。 (评论包含)
我捕获文件内容的代码是:
target_link_libraries(MyExe debug "d:/librarys/wnt/i386/fooba/foo.lib")
$ file的示例内容如下:
ob_start();
include($file);
$c = ob_get_contents();
ob_end_clean();
欢迎任何帮助。
答案 0 :(得分:3)
解决此问题的一种方法 - 如果包含的文件不大 - 是使用带有多行标记/修饰符的正则表达式,它将匹配以task<string> aTask{ create_task([]() {
return string{};
}
)
};
开头的所有行。
请参阅PHP demo:
//
正则表达式分解:
$re = '~^\s*//.*$\s*~m';
$str = "//Comment here\n//Second line\n//All the comment lines are optional\n<p>Html content here</p>\n<?php echo \"Php content may also exists!\"; ?>";
echo preg_replace($re, "", $str);
- 开始行(因为我们使用的是^
修饰符)/m
- 可选空格(0次或更多次出现)\s*
- 两个正斜杠//
- 除换行符之外的任何零个或多个字符.*
- 行的结尾(因为我们使用的是$
修饰符)/m
- 可选空格(用于修剪换行符)。答案 1 :(得分:1)
如果你想在实际代码开始之前只删除注释,你需要一个状态机(正则表达式解决方案更紧凑,但删除了任何地方的行注释):
$c = "//Comment here\n//Second line\n//All the comment lines are optional\n<p>Html content here</p>\n<?php echo \"Php content may also exists!\"; ?>";
$output = "";
$stripComments = true;
foreach(preg_split("/((\r?\n)|(\r\n?))/", $c) as $line) {
if ( $stripComments ) {
if ( preg_match("~^\s*//~",$line) )
continue;
else {
$stripComments = false;
$output .= $line."\n";
}
}
else
$output .= $line."\n";
}
echo "$output";