-1

だから私はSQLファイルを持っていて、setvarsを見つけたいと思っています。
ファイルは次のようになります。

...  
:setvar DatabaseName "Database_1"  
...  
:setvar DefaultDataPath ""  

"(?m)^:setvar " + variable変数がたとえば「DatabasseName」または「DefaultDataPath」である必要があるこの状態の私のパターン。しかし、行末は一致の Value プロパティにありません。私もこれを試しました:"(?m)^:setvar " + variable + ".+\"$"しかし、それは一致しません:)

助けてくれてありがとう、
ピーター

4

2 に答える 2

3

試してみてください:setvar\s+(?<variable>\w*)\s+"?(?<value>\w*)"?- これにより、各行が解析され、一致するすべての変数と値を含む名前付きグループが得られます。

それを分解する:

  • :setvar":setvar" で始まり、その後に 1 つ以上のスペースが続く文字列のセクションを検索します。
  • (?<variable>\w*)その「setvar」に続く非空白文字を取得し、それらを名前付きグループ「変数」に解析します
  • "?(?<value>\w*)"?変数に続く非空白文字を取得し、それらを名前付きグループ「値」に解析します。両側の "? は、引用符をオプションにします。
  • \s+(複数回表示されます) 1 つ以上のスペースを使用して、変数と値から setvar を区切ることができます。

このコードを使用して:

var findSetvars = new Regex(@":setvar\s+(?<variable>\w*)\s+""?(?<value>\w*)""?");
var matches = findSetvars.matches(input);

次のように列挙できるMatchCollectioninを取得します。matches

foreach(Match match in matches)
{
   var variable = match.Groups["variable"];
   var value = match.Groups["value"];
   // now do whatever. 
}

Regex.MatchCollectionは .net 1.0 スタイルのオブジェクト コレクションの 1 つであるため、その各メンバーがオブジェクトであることをコンパイラに伝える必要があることに注意してくださいMatch。非常に面倒です。一致の一般的なリストに切り替えてくれたらいいのにと思います。の結果はmatch.Groups["groupname"]、グループによってキャプチャされた文字列になります。

于 2013-04-11T13:26:34.797 に答える
0

このパターンを試してください。

(\:setvar)\s+(?<variable_name>\S+)\s+"?(?<variable_value>.*)"?

この入力で

...  
:setvar DatabaseName "Database_1"  
...  
:setvar DefaultDataPath ""  
...
:setvar IntVariable 24
于 2013-04-11T13:31:12.927 に答える