からすべての表示されたテキストこれは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コードの例です。しかし、私はエコー行からPHPコードを削除する方法を見つけることはできませんし、静的コンテンツだけを保持します。 私が検出しようとしているのは次のとおりです。
1単語 "echo";
2引用符で始まっておらず、開閉括弧(存在する場合)と同数のコンテンツコンテンツで、ポイントで仕上げます。 - OR - 引用符間の任意の内容(エスケープ文字の検出あり)
4「;」に達するまで手順2でループします。
私は正しい方向に向かっていますか?私はステップ2のために使用すべき正規表現に関して私を助けてください。
ありがとうございます!
[UPDATE]
私は(私はそれがエコー機能のすべての可能な使用法をカバーしていないことを知っているが、私は、それは今のところ十分だと思います)、次の正規表現を使用してエコー内容と一致することに成功した。
preg_match_all("~echo ([^'\"]*?((?<!\\\\)['\"])((?:(?!\\2).)+?|(?-3))*?\\2[^'\"]*?);~siu", $initialContent, $tMatches, PREG_SET_ORDER);
私はコンテンツを持っているので、静的コンテンツだけを保持するためにPHPコードを削除する必要があります。 preg_replaceを使用してこのコンテンツを削除する予定ですが、この目標を達成するための正規表現は見つかりません...
これを実行すると非常に多くのエッジケースに遭遇する可能性がありますが、regexpsを使用することをお勧めしません。代わりにhttp://php.net/token_get_all – Calimero
実際にエコーをブラケット'echo( 'foo');' ect。これの目標は何か分かりますか?それはXYの問題かもしれません – Kaddath
一般的なアイデアは、翻訳者に私のページのすべての内容を送信したいということです。 静的なHTMLコンテンツに問題はありませんが、HTMLタグを削除しました。入力フィールドからプレースホルダを返すことができました。エラーメッセージなどの問題はなく、DBを使用した翻訳があります。 しかし、時々、私のビューにはPHPの基本的な内容(配列の異なる行を表示するループのような)があり、PHPコードから直接テキストを表示することがあります。 もちろん、私はそれを避けるためにすべての私の意見を変更することができますが、それは膨大な時間がかかり、正規表現は簡単になります:D – Lionel