MPS 2023.3 ヘルプ

正規表現言語

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

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

正規表現を定義する

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

Pattern pattern = /[a-z]+/

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

/i

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

/s

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

/m

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

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

定義を再利用する

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

モデル -> 新規 -> jetbrains.mp.baseLanguage.regexp-> 正規表現

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

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 ブロックでアクセスできます。

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

関連ページ:

正規表現

正規表現言語の概要:導入正規表現言語(テキスト操作を大幅に簡素化する言語)は、現在最も使用されているドメイン固有の言語の 1 つです。ほとんどすべての開発者が少なくとも 1 回は使用しています。Perl や Python などの一部の言語には、サポートが組み込まれています。Java などの一部は、ライブラリを介して使用します。MPS の実装に使用する言語である Java には、正規表現の言語レベルのサポートがないため、DSL を実装するのが自然であったため、正規表現ライブラリの代わりに DSL...

MPS Kotlin 言語

入門:MPS Kotlin を使用するには、型システムプラグインをインストールする必要があります。その方法については、プラグインページを参照してください。このプラグインは、作成するコードに適切な型を取得するために必要です。インストールしたら、型システムを有効にするために必要なことは、MPS ウィンドウの右下にある Coderules ウィジェットを切り替えることだけです。コードルールは、型システムのベースとなるフレームワークです。余談ですが、コードがモデルに書き留められると、生成 / テキスト...

型拡張メソッド

Jetbrains.mps.baseLanguage.extensionMethods 言語は、Java の静的メソッドに似た、新しく定義されたメソッドまたはオーバーライドされたメソッドを使用して有効な MPS 型を拡張する方法を提供します。"This is an ordinary string with a surpricing behavior!".myNewMethod() "Develop with pleasure!".isAPleasureMessage() int num = ......