2011-08-08 11 views
0

私はオンラインで投稿したいJavaファイルがあります。私はファイルをフォーマットするためにPHPを使用しています。正規表現でファイルをフォーマットする必要があります

誰かがコメントを青にする正規表現を知っていますか?

INPUT:

/***** 
*This is the part 
*I want to turn blue 
*for my class 
*******************/ 
class MyClass{ 
    String s; 

} 

感謝。

+2

http://alexgorbatchev.com/SyntaxHighlighter/またはhttp://qbnz.com/highlighter/のようなソリューションを使用できますか?あなたは車輪を再発明する必要はありません。 =) – Jens

答えて

1

Naiiveバージョン:

$formatted = preg_replace('|(/\*.*?\*/)|m', '<span class="blue">$1</span>', $java_code_here); 

...テストされていない、YMMV、等...一般的には

0

、あなただけの定期的な使用して、Javaファイルの特定の部分を解析することができません式 - Javaはregular languageではありません。ファイルに構造体が追加されている場合(「常にコメントの後に改行が続き、クラス定義が続く」など)、そのような場合の正規表現を生成することができます。たとえば、/\*+(.*?)\*+/$と一致させると、.は複数の行と一致するとみなされ、$は行の末尾と一致します。

一般に、正規表現の作業を行うには、まず見つけたいパターン(厳密に言えば口語で)を定義し、それを標準正規表現表記に変換します。

幸運。

0

シンプルな引用符を解析できる正規表現は、C/C++スタイルの言語でコメントを見つけることができます。
私はJavaがそのタイプであると仮定します。

これは、//スタイルコメント(行の有無にかかわらず)の部分を追加して改訂したものの、これは他の人がPerlのfaqサンプルです。

基本的にはグローバル検索と置き換えを行います。データは、コメントでない場合はそのまま置き換えられます。そうでない場合は、コメントをカラーフォーマットタグで置き換えます。

あなたはこれをPHPに適合させることができるはずです。明快にするために拡張されています(しかしあまりにも明快かもしれません)。

s{ 
    ## Comments, group 1: 
    (
     /\*   ## Start of /* ... */ comment 
     [^*]*\*+ ## Non-* followed by 1-or-more *'s 
     (?: 
      [^/*][^*]*\*+ 
     )*   ## 0-or-more things which don't start with/
        ## but do end with '*' 
     /   ## End of /* ... */ comment 

     | 
     //   ## Start of // ... comment 
     (?: 
      [^\\]   ## Any Non-Continuation character ^\ 
      |    ## OR 
      \\\n?   ## Any Continuation character followed by 0-1 newline \n 

     )*?   ## To be done 0-many times, stopping at the first end of comment 

     \n   ## End of // comment 
    ) 

| ## OR, various things which aren't comments, group 2: 
    (
     " (?: \\. | [^"\\])* " ## Double quoted text 
     | 

     ' (?: \\. | [^'\\])* ' ## Single quoted text 
     | 
     .   ## Any other char 
     [^/"'\\]* ## Chars which doesn't start a comment, string, escape 
    )    ## or continuation (escape + newline) 
} 
{defined $2 ? $2 : "<some color>$1</some color>"}gxse; 
関連する問題