2017-10-19 7 views
1

からすべての表示されたテキストこれは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を使用してこのコンテンツを削除する予定ですが、この目標を達成するための正規表現は見つかりません...

+1

これを実行すると非常に多くのエッジケースに遭遇する可能性がありますが、regexpsを使用することをお勧めしません。代わりにhttp://php.net/token_get_all – Calimero

+1

実際にエコーをブラケット'echo( 'foo');' ect。これの目標は何か分かりますか?それはXYの問題かもしれません – Kaddath

+0

一般的なアイデアは、翻訳者に私のページのすべての内容を送信したいということです。 静的なHTMLコンテンツに問題はありませんが、HTMLタグを削除しました。入力フィールドからプレースホルダを返すことができました。エラーメッセージなどの問題はなく、DBを使用した翻訳があります。 しかし、時々、私のビューにはPHPの基本的な内容(配列の異なる行を表示するループのような)があり、PHPコードから直接テキストを表示することがあります。 もちろん、私はそれを避けるためにすべての私の意見を変更することができますが、それは膨大な時間がかかり、正規表現は簡単になります:D – Lionel

答えて

0

正規表現を使用して問題を解決しようとすると、 2つの問題があります:

/['"]([^'"]*)['"]/ 

Regexがデータを抽出するのに役立つことを願っています。

+0

母はそうです。正規表現は本当に苦労しています... :( あなたの返信をありがとうございますが、私はもっと完全なものを探しています。例えば、引用符をエスケープした場合や、文字列が単一の正規表現のこの部分に関しては、私は現在、以下を使用しています: ((?<!\\)['"])((?:(?!2))+?|(? -3))*σ2 – Lionel