2011-07-08 10 views
0

複数行の正規表現マッチャーを使って次の設定ファイルサンプルを読む方法を探しています。私はファイルごとに行単位で読み込むことができますが、柔軟な正規表現マッチングの詳細についてはまともになりたいと思います。テキスト設定ファイルを読む:regexを使って構文解析する

次のように設定ファイルは、コードのブロックで満たされる:

blockName BLOCK 
    IDENTIFIER value 
    IDENTIFIER value 
    IDENTIFIER 
      "string literal value that 
      could span multiple lines" 

識別子の数は1..infinityからかもしれません。 IDENTIFIERはNAME、DESCRIPTION、TYPEなどである可能性があります。

以前は複数行の正規表現で作業したことがありません。私はそのプロセスにあまり精通していません。私は基本的に、この正規表現を使ってfindAll関数を使用して、解析されたブロックデータをすべて処理のためのデータ構造に入れることを望みます。

EDIT:説明:私はこのファイルを一度読んでみたいと思っています。私は効率や優雅さを気にしません。私はその情報をデータ構造に読み込んで、それを別の形式で吐き出したいと思っています。それは大きなファイル(3000行)であり、私は手でこれをしたくありません。

+1

このために適切なレクサーとパーサーを作成する方がよい場合があります。 – tdammers

+0

どの言語/ツール(たとえば、Perl、Python、JavaScript、PowerShellなど)を使用していますか?それぞれに独自の正規表現のフレーバがあり、各フレーバには独自の機能とクォークがあります。 –

+0

私はPythonを使用しています。 – SirensOfTitan

答えて

0

perlの正規表現では動くはずです、これを試してみてください:

([\w\d]*)\s+BLOCK\s*\n(\s*(NAME|DESCRIPTION|TYPE|...)\s*([\w\d]*|"(.*)")\s*\n)+ 

私は、次のテストテキストを使用してREGex TESTERでそれを検証:

blockName BLOCK 
    NAME value 
    NAME value 
    DESCRIPTION 
      "string literal value that 
      could span multiple lines" 
otherName BLOCK 
    NAME value 
    TYPE value 
    DESCRIPTION 
      "string literal value that 
      could span multiple lines" 

それは場合にのみ、最後のブロック/識別子を見つけるだろうファイルは改行で終了します

1

私は正規表現はこれのための最良のツールだとは思わない。