ファイルを解析し、php と正規表現を使用して削除したい:
- 空白または空行
- 一行コメント
- 複数行コメント
基本的に、次を含む行を削除したい
/* text */
または複数行のコメント
/***
some
text
*****/
可能であれば、行が空かどうかを確認する別の正規表現 (空白行を削除)
それは可能ですか?誰かが私にそれを行う正規表現を投稿できますか?
どうもありがとう。
ファイルを解析し、php と正規表現を使用して削除したい:
基本的に、次を含む行を削除したい
/* text */
または複数行のコメント
/***
some
text
*****/
可能であれば、行が空かどうかを確認する別の正規表現 (空白行を削除)
それは可能ですか?誰かが私にそれを行う正規表現を投稿できますか?
どうもありがとう。
// 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);
$string = preg_replace('#/\*[^*]*\*+([^/][^*]*\*+)*/#', '', $string);
これは、すべての /* を */ に置き換えることで機能するはずです。
$string = preg_replace('/(\s+)\/\*([^\/]*)\*\/(\s+)/s', "\n", $string);
これは優れた機能であり、動作します!
<?
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);
?>
正規表現に慣れていない場合、これが私の解決策です。次のコードは、# で区切られたすべてのコメントを削除し、このスタイル 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);
}