MPS 2019.1ヘルプ

正規表現言語

正規表現は広く使われている最も初期のDSLの1つです。最近のほとんどすべての現代のプログラミング言語は、何らかの形で正規表現をサポートしています。MPSも例外ではありません。MPSの正規表現のサポートは、基本言語の拡張を通じて実装されています。

また、正規表現クックブックをチェックして、その言語をさらに徹底的に紹介することをお勧めします。

正規表現を定義します。

正規表現言語では、特殊なパターン式/regexp/を使用してjava.util.regex.Patternクラスのインスタンスを作成できます。生成されたコードでは、MPSは定義されたパターン式ごとに最外部クラスの最後の静的フィールドを作成するため、パターンはアプリケーションの実行時に1回だけコンパイルされます。

Pattern pattern = /[a-z]+/

3つのオプションがあり、正規表現の最後のスラッシュの後に追加できます。

/i

大文字と小文字を区別しないマッチング

/s

文字列を単一行として扱い、ドット文字クラスは改行セパレーターを含みます

/m

複数行モード: ^および$文字は、文字列内の任意の行に一致する (文字列の先頭または末尾ではなく)

エディターで文字を入力または削除するか、インスペクタを使用してオプションをオンまたはオフにできます。生成された正規表現のプレビューはインスペクタで利用できます。

定義を再利用する

プロジェクト全体で頻繁に使用されるパターンに正規表現を再利用するには、別のルートを作成します。

model -> New -> jetbrains.mp.baseLanguage.regexp -> Regexps

それぞれの再利用可能な正規表現は名前と、必要に応じて説明を持つべきです。

regexp Identifier { // no description (identifier: [a-z A-Z _] [a-z A-Z _ 0-9]+) }

パターンマッチ演算子

文字列が指定されたパターンと一致する場合、=~演算子はtrueを返します。

"string or variable" =~ /regexp/

テキストをキャプチャーする

式の中で括弧をオプションで使用すると、キャプチャーグループが作成されます。後でそのグループを参照できるようにするには、名前を付けることをお勧めします。

/^ (name: [a-z A-Z _] [a-z A-Z _ 0-9]+) /

サンプル

if ("any string" =~ /^ # define (identifier: [a-z A-Z _] [a-z A-Z _ 0-9]+) /) { process(identifier); }

パターンが文字列と一致すると、一致した値が識別子に取り込まれ、ifブロック内でアクセスできます。

さらに徹底的に言語を紹介するために、正規表現クックブックをチェックしてください。

最終更新日: 2019年7月5日