2017-02-02 10 views
0

私はC#に基づいて独自のスクリプト言語を作成したいので、私はtokenizeを使い始めようとしています。regex styleguide with plaintext

今のところ、私はちょっと丸ごと再生しており、正規表現を少し深く学んでいます。だから、私は正規表現にはかなり新しいです。

例えば、私は

foreach(str x:test.GetItems()) 

と一致し、groupvalues strxを取得したい、test.GetItems()

私の正規表現は次のとおりです。

foreach\s*\((\s*([A-Za-z0-9]+)\s+([A-Za-z0-9]+))\s*\:\s*(.+)\) 

と、これは今のところ動作します。

ので、私の質問は以下のとおりです。

  • は、例えば、ハードコードされた文字列のようなものを持ってすることをお勧めしますforeach私の正規表現で?そうでない場合、私は何をしたいですか
  • 私の構文で:の場合、私は正規表現:または\:で書くことができます。それにもかかわらず、それはMatches a ":" character (char code 58).と書いています私はキャラクターをエスケープすべきでしょうか、そうでなければなりませんか?

答えて

1

私の正規表現では、ハードコーディングされた文字列[...]のようなものを持っていることをお勧めますか?

あなたはあるとして、それを書く(foreachusingあるいはpotato)、リテラル文字列と一致する必要があります。あなたがそれから脱出/分割/それ以外のものをする理由は絶対にありません。私の構文で:ため

、私は正規表現:かも\:に書くことができます。 [...]私はキャラクターを逃れるべきですか、私はすべきではありませんか?

:には特別な意味はありませんので、エスケープする必要はありません。さらに、でエスケープしないでください。一部の正規表現エンジンで構文エラーが発生する可能性があるためです。

\sを除く) enter image description here

cが紫であるべきか、他のすべてが黒でなければなりません:色の不一致が原因このスクリーンショットのような不適切な解析であってよい

が示唆します