所有顯示的文本這是我在StackOverflow上的第一篇文章,我希望我會盡我所能,尊重所有的規則:)摘自PHP代碼
我有一個包含PHP代碼的文件。我正在嘗試讀取文件並僅提取通過回顯行顯示的文本,而沒有動態內容。
這裏是一個PHP代碼示例,我使用用於測試目的:
some HTML data
<?php
echo 'OK';
echo 'OK'.$ko;
echo $ko.'OK';
echo $ko.'OK'.$ko.'OK'.$ko;
echo 'OK'.$ko.'OK'.$ko;
echo 'OK'.(($data=='toto') ? 'OK' : 'OK2').'OK';
echo someFunction().'OK';
?>
some HTML data
我沒有問題通過以下正則表達式中提取從內容的其餘部分的PHP代碼:
preg_match_all("~<\\?php(.*?)\\?>~siu", $initialContent, $tMatches, PREG_SET_ORDER);
但我沒有成功找到如何從回顯行中刪除PHP代碼,並只保留靜態內容。 我想要檢測的是:
1「echo」;不開始
2不限內容的內容與報價,與相等數目的開閉括號(如果有的話),以及由點精加工; - 或者 - 引號之間的任何內容(檢測到轉義字符)
在步驟2上循環4次,直到達到「;」。
我該走向正確的方向嗎?你能幫我關於我應該用於第2步的正則表達式嗎?
在此先感謝!
[更新]
我成功了使用下面的正則表達式(我知道,它不包括回波函數的每一個可能的用法,但我認爲這是夠了)來匹配回聲內容:
preg_match_all("~echo ([^'\"]*?((?<!\\\\)['\"])((?:(?!\\2).)+?|(?-3))*?\\2[^'\"]*?);~siu", $initialContent, $tMatches, PREG_SET_ORDER);
既然我有內容,我必須刪除任何PHP代碼才能保留靜態內容。我打算使用的preg_replace刪除該內容,但我沒有發現任何的正則表達式來實現這一目標?
你可以遇到這麼多的邊緣情況下這樣做,我不會推薦使用正則表達式,而是http://php.net/token_get_all – Calimero
實際上有很多邊緣情況,如回聲可以與括號'echo('foo');'等等。我們可以知道這個目標是什麼嗎?這可能是一個XY問題 – Kaddath
總的想法是,我想向翻譯者發送我的頁面的所有內容。 對於靜態HTML內容沒有問題,我刪除了HTML標籤,我能夠(從輸入字段)返回佔位符,我沒有問題,與具有使用DB ... 翻譯的錯誤信息等但有時,我認爲有一些PHP基本內容(如一個循環來顯示一個陣列的不同線)和它可以發生在直接從PHP代碼顯示文本。 當然,我可以修改我的所有視圖,以避免但這需要大量的時間,而正則表達式會更容易:d – Lionel