0

プロジェクトを作成していますが、正規表現を使用できる必要があります(または他の何かが望ましい場合は?)

基本的に、「非コード」が「コード」に変換されるように、PHPのマークアップコードページを変換する必要があります。例えば:

オリジナル:

<?code
  echo 'some text';
?>
<head>
</head>
<body>
</body>
<?code
  echo '</html>';
?>

変換された:

<?code
  echo '<html>';
  echo '
<head>
</head>
<body>
</body>';
  echo '</html>';
?>

見積もりも考慮に入れながら、これはどのように機能しますか?(お気に入り<?code $var='<?code stuff ?>';?>

また、誰かがインクルードされたファイルを検出するための何かを私に提供した場合(最初にファイルを「事前所有」してからそれをインクルードするものに置き換えるため)(インクルードはPHPに似ています)

これは正規表現でも可能ですか?正規表現を使用してHTMLを解析しようとは思わないことは知っていますが、これはHTMLを解析しようとしているのではなく、マークアップとすべてがどのようになっているのか非常に馬鹿げています。

また、このプロジェクトは実際にはRuby(つまりプリプロセッサ)で実装されるので、Rubyがこれを支援するものがある場合は、それを実行してください。

コードがPHPに非常に似ていることは知っていますが、それはPHPに実装されておらず、使用される「コード」は実際にはPHPではなく<?、マークアップにコードを含めるための型メカニズムを使用するためです。

編集:マークアップ内の言語は、すべての実用的な目的でRubyである可能性があることにも注意してください。したがって、終了コードタグを持つ引用符とコメントを含めることができます。

4

2 に答える 2

3

token_get_allパーサートークンのストリームを取得するために使用できます。それらをループしてエコーアウトします。に遭遇しT_INLINE_HTMLたら、代わりにエコーステートメントに書き換えることができます。

編集-あなたがRubyを使用していると言っているのを見たばかりです。明らかに、Ruby内からPHPのトークナイザーを使用することはできません。たぶん、コマンドラインからphpを呼び出すことができますか?

編集2:

これは正規表現でも可能ですか?正規表現を使用してHTMLを解析しようとは思わないことは知っていますが、これはHTMLを解析しようとしているのではなく、マークアップとすべてがどのようになっているのか非常に馬鹿げています。

解析は大丈夫です。正規表現を使用して、入力をトークンに分割できます(トークン化とも呼ばれます)。ほとんどの言語はコンテキストに依存しているため、トークンをステートマシンにフィードする必要があります。ステートマシンは、コードを内部表現(AST)に解析できます。次に、これをターゲット出力に変換できます。手の込んだ怖い音に聞こえますが、何度か試してみるととても簡単です。ウィキペディアとグーグルの助けを借りて、それを乗り越えることをお勧めします。

于 2010-02-14T19:30:11.720 に答える
0

答えではなく、いくつかのアイデア:

PHPのブロックを見つけることができる正規表現を見つけてから、他のすべてをエコーでラップすることをお勧めします。その逆ではありません。

別のオプションはPHPトークナイザーを調べることかもしれませんが、私が恐れているタグの外側のHTMLのセクションをどのように処理するかはわかりません。

于 2010-02-14T19:22:16.750 に答える