25

ファイルを解析し、php と正規表現を使用して削除したい:

  • 空白または空行
  • 一行コメント
  • 複数行コメント

基本的に、次を含む行を削除したい

/* text */ 

または複数行のコメント

/***
some
text
*****/

可能であれば、行が空かどうかを確認する別の正規表現 (空白行を削除)

それは可能ですか?誰かが私にそれを行う正規表現を投稿できますか?

どうもありがとう。

4

9 に答える 9

7
//  Removes multi-line comments and does not create
//  a blank line, also treats white spaces/tabs 
$text = preg_replace('!^[ \t]*/\*.*?\*/[ \t]*[\r\n]!s', '', $text);

//  Removes single line '//' comments, treats blank characters
$text = preg_replace('![ \t]*//.*[ \t]*[\r\n]!', '', $text);

//  Strip blank lines
$text = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $text);
于 2013-10-02T12:15:40.257 に答える
3
$string = preg_replace('#/\*[^*]*\*+([^/][^*]*\*+)*/#', '', $string);
于 2012-02-03T15:06:17.777 に答える
2

これは、すべての /* を */ に置き換えることで機能するはずです。

$string = preg_replace('/(\s+)\/\*([^\/]*)\*\/(\s+)/s', "\n", $string);
于 2009-03-13T15:28:10.620 に答える
1

これは優れた機能であり、動作します!

<?
if (!defined('T_ML_COMMENT')) {
   define('T_ML_COMMENT', T_COMMENT);
} else {
   define('T_DOC_COMMENT', T_ML_COMMENT);
}
function strip_comments($source) {
    $tokens = token_get_all($source);
    $ret = "";
    foreach ($tokens as $token) {
       if (is_string($token)) {
          $ret.= $token;
       } else {
          list($id, $text) = $token;

          switch ($id) { 
             case T_COMMENT: 
             case T_ML_COMMENT: // we've defined this
             case T_DOC_COMMENT: // and this
                break;

             default:
                $ret.= $text;
                break;
          }
       }
    }    
    return trim(str_replace(array('<?','?>'),array('',''),$ret));
}
?>

この関数「strip_comments」を使用して、変数に含まれるコードを渡します。

<?
$code = "
<?php 
    /* this is comment */
   // this is also a comment
   # me too, am also comment
   echo "And I am some code...";
?>";

$code = strip_comments($code);

echo htmlspecialchars($code);
?>

出力結果は次のようになります

<?
echo "And I am some code...";
?>

PHP ファイルからのロード:

<?
$code = file_get_contents("some_code_file.php");
$code = strip_comments($code);

echo htmlspecialchars($code);
?>

PHP ファイルを読み込み、コメントを削除して保存し直す

<?
$file = "some_code_file.php"
$code = file_get_contents($file);
$code = strip_comments($code);

$f = fopen($file,"w");
fwrite($f,$code);
fclose($f);
?>

ソース: http://www.php.net/manual/en/tokenizer.examples.php

于 2012-10-04T18:59:06.653 に答える
0

正規表現に慣れていない場合、これが私の解決策です。次のコードは、# で区切られたすべてのコメントを削除し、このスタイル NAME=VALUE で変数の値を取得します

  $reg = array();
  $handle = @fopen("/etc/chilli/config", "r");
  if ($handle) {
   while (($buffer = fgets($handle, 4096)) !== false) {
    $start = strpos($buffer,"#") ;
    $end   = strpos($buffer,"\n");
     // echo $start.",".$end;
       // echo $buffer ."<br>";



     if ($start !== false)

        $res = substr($buffer,0,$start);
    else
        $res = $buffer; 
        $a = explode("=",$res);

        if (count($a)>0)
        {
            if (count($a) == 1 && !empty($a[0]) && trim($a[0])!="")
                $reg[ $a[0] ] = "";
            else
            {
                if (!empty($a[0]) && trim($a[0])!="")
                    $reg[ $a[0] ] = $a[1];
            }
        }




    }

    if (!feof($handle)) {
        echo "Error: unexpected fgets() fail\n";
    }
    fclose($handle);
}
于 2012-05-31T16:59:28.207 に答える