如何从php开始删除文件/字符串的注释

时间:2015-10-22 07:34:46

标签: php regex

我有几个文本文件,以编程方式包含在我的代码中。我需要一个正则表达式,以便能够从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();

欢迎任何帮助。

2 个答案:

答案 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";