2011-06-24 22 views
1

PHPで構文ハイライトを作成していましたが、失敗しました!私はスクリプトのコメントを作成していたときに(//)構文ハイライト(gray)、私はいくつかの問題に直面していた。だから私はあなたのすべての問題を示すために、Syntax Highlighting Functionの短縮バージョンを作成しました。 PHP変数、つまり$exampleがコメントの間に挿入された場合は、grayedがSyntax Highlighterに準拠する必要があります。これを達成するために私はpreg_replace()を使用しています。でも、私が現在使っているのはregexが正しいとは思われません。私はそれについて知っているほとんどすべてを試しましたが、うまくいきません。以下のデモコードを参照してください。PHP Regexの問題!

問題デモコードが

<?php 
    $str = ' 
    <?php 
    //This is a php comment $test and resulted bad! 
    $text_cool++; 
    ?> 
    '; 
    $result = str_replace(array('<','>','/'),array('[',']','%%'),$str); 
    $result = preg_replace("/%%%%(.*?)(?=(\n))/","<span style=\"color:gray;\">$0</span>",$result); 
    $result = preg_replace("/(?<!\"|'|%%%%\w\s\t)[\$](?!\()(.*?)(?=(\W))/","<span style=\"color:green;\">$0</span>",$result); 
    $result = str_replace(array('[',']','%%'),array('&lt;','&gt;','/'),$result); 
    $resultArray = explode("\n",$result); 
    foreach ($resultArray as $i) { 
    echo $i.'</br>'; 
    } 
?> 

問題デモ画面

enter image description here

だから、私が欲しい結果が 'デモ画面' のコメント文字列のその$testで見ます上記の色もgrayとする必要があります(下記参照)

enter image description here

誰でもこの問題を解決できますか?

I'm Aware of highlight_string() function! 

謝辞!

+2

で、*の問題があります。 – Orbling

+0

あなたは本当に自分自身を圧倒していますか?なぜ車を再発明するのですか? –

+3

お友達を助けてください。 –

答えて

3

私は、既存のパーサーを使用することに同意します。すべてのIDEにはPHPパーサがあり、多くの人がそれらの詳細を書いています。

しかし、私はそれが精神的な運動の価値があると思います。だから、あなたは置き換えることができます:あなたは、それはそれを言うことができますないこと、それをやっている*なぜ

$result = preg_replace("/(?<!\"|')[\$](?!\()(.*?)(?=(\W))/","<span style=\"color:green;\">$0</span>",$result); 

PHPを内蔵この機能を持っていたよう
//regular expression.: 
//#([^(%%%%|\"|')]*)([\$](?!\()(.*?)(?=(\W)))# 

//replacement text: 
//$1<span style=\"color:green;\">$2</span> 

$result = preg_replace("#([^(%%%%|\"|')]*)([\$](?!\()(.*?)(?=(\W)))#","$1<span style=\"color:green;\">$2</span>",$result); 
+0

私はこれが実際に動作するとは思わない!しかし、アドバイスをいただきありがとうございます。 –

+0

試しましたか?私はそれを試しました[ここ](http://www.spaweditor.com/scripts/regex/index.php) –

+0

使い方を教えてください。 –

6

ホイールを改造しますか?

highlight_string()

彼らは(人気の需要にもかかわらず)パーサ、および正規表現がパーサとして使用することはできませべきで持っている理由も、これです。

+0

しかし、元のphp Syntax Highlighterとは違った、素晴らしい色の組み合わせを持った独自のSyntax Highlighterを作成したいと思っていたので、 'regex'でそれを行う方法はありません!私を助けてください。 –

+0

@Jack:解決策は、正規表現を使用しないことです。正規表現はいくつかのものには良いですが、構文解析に関してはそうではありません。 (たとえば、変数名ではあるが、コメントブロックには入っていないインスタンスを捕捉するために、例外パターンを作成しなければならないだろう)。 –

+0

@Jack:これを一時文字列( '$ temp = highlight_string(...)')に解析し、次に文字列置換を実行することができます。 "すべての色#FF00FFは#00FF00になるはずです"(自分の体系を作る)。 –

2

個人的には、CSSセレクタを使用することをお勧めします。 class="variable-text"class="comment-text"style=\"color:green;\"style=\"color:gray;\"を交換し、このCSSはあなたのために働く必要があります。

.variable-text { 
    color: #00E; 
} 
.comment-text .comment-text.variable-text { 
    color: #DDD; 
} 
1

挿入しますに実行しているように見える、とにかくここ

を不規則な言語を解析するために正規表現を使用していません正規表現がこの種の問題に適していない理由の代表例です。 PHPのhighlight_stringの機能を調べる方が良いでしょう

0

まあ、PHPはすでにこのような機能を持っていることに気をつけていないようです。

PHPコードの構造のために、これに正規表現を単に使うことはできませんし、モルドールに歩くこともできません(後者は簡単です)。

パーサーを使用する必要があります。まもなく、鳩の巣を飛ぶことになります。