そのため、特定のスニペットのテキストファイルをフィルタリングする正規表現を作成しようとしています(ブルートフォースではなく速度を探しています)。
各試合から3つのものを取得したい:
- スニペットを識別するためのキー
- 各スニペットをフォーマットするためのオプションの言語
- 開始タグと終了タグの間のすべての行を表す値
これは正規表現です(失敗したテストハーネスはここにあります-https ://gist.github.com/shiftkey/5236161 ):
(?s)code start (?<key>[A-Za-z-]*) (?<language>[A-Za-z]*).*[\n](?<value>.*?)[\n].*end code (?<key>[A-Za-z-]*)
これらのオプションの使用:RegexOptions.Compiled | RegexOptions.ExplicitCapture | RegexOptions.Multiline
。
したがって、次のようなファイル:
// code start foo csharp
var x = 1;
// end code foo
期待値を教えてください:
- キー:foo
- 言語:csharp
- 値:
var x = 1;
しかし、2番目の行を持つスニペットを導入すると、最後の行しか取得できません。
// code start foo csharp
var x = 1;
var y = 2;
// end code foo
- キー:foo
- 言語:csharp
- 値:
var y = 2;
それ以外の
- 値:(
var x = 1;\r\nvar y = 2;
または同様の)
グループに複数の行をカバーさせることで何を見逃しましたか?
SOで発生した同様のシナリオを見てきましたが、それらは私の使用法では機能しませんでした。