[英]php regex remove inline comment only
我有簡單的代碼看起來像這樣
function session(){
return 1; // this default value for session
}
我需要正則表達式或代碼來刪除注釋// this is default value for session
,並且僅刪除此類型的注釋,該注釋以一個或兩個或多個空格開頭,然后是//
,然后是換行符。
所有其他類型的評論和案例將被忽略。
更新 (1)
並且僅刪除此類型的注釋,該注釋以一個或兩個以上的空格開頭,然后是//,然后是換行符
試試這個:
PHP Fiddle 1- 點擊“運行”或F9查看結果
/\s+\/\/[^\n]+/m
\\s+
以一個或兩個以上空格開始 \\/\\/
轉義的//
[^\\n]+
除換行符外的所有內容 更新:為了確保- 有點 -這僅適用於代碼行,我們可以使用lookbehind (2)正則表達式來檢查是否存在分號;
在空格和注釋之前加斜杠//
,因此正則表達式為:
/(?<=;)\s+\/\/[^\n]+/m
其中(?<=;)
是基本上告訴引擎向后看 ,並檢查是否有一個的反向預搜索;
然后再匹配。
(1) preg_replace
工作全球范圍內,無需對 g
標志
(2) javascript不支持lookbehind
一個純正則表達式解決方案如下所示:
$result = preg_replace('#^(.*?)\s+//.*$#m', '\1', $source);
但這仍然是錯誤的,因為您可能會被這樣的事情困住:
$str = "This is a string // that has a comment inside";
一個更可靠的解決方案是使用token_get_all()完全重寫php代碼,以將PHP代碼實際解析為令牌,然后在重新發送代碼時可以有選擇地刪除它們:
foreach(token_get_all($source) as $token)
{
if(is_array($token))
{
if($token[0] != T_COMMENT || substr($token[1] != '//', 0, 3))
echo $token[1];
}
else
echo $token;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.