次の正規表現を使用して、createindexステートメントのテーブル名と列の詳細を取得します。
Regex r = new Regex(@"create\s*index.*?\son\s*\[?(?<table>[\s\w]*\w)\]?\s*\((?:(?<cname>[\s\d\w\[\]]*),?)*\)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
これをObjective-Cで使用したいと思います。私は以下を試しました:
NSError * error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern: @"create\\s*index.*?\\son\\s*\\[?([\\s\\w]*\\w)\\]?\\s*\\((?:([\\s\\d\\w\\[\\]]*),?)*\\)"
options: NSRegularExpressionCaseInsensitive | NSRegularExpressionSearch
error: &error];
if(nil != error)
{
NSLog(@"Error is: %@. %@", [error localizedDescription], error);
}
NSRange rangeOfFirstMatch = [regex rangeOfFirstMatchInString: createStatement options:0 range: NSMakeRange(0, [createStatement length])];
NSArray *matches = [regex matchesInString: createStatement
options: 0
range: NSMakeRange(0, [createStatement length])];
これは部分的に機能します。それは私に3つの範囲を与えます。最初の文字列には文字列全体が含まれ、2番目の文字列にはテーブル名が含まれます。問題は、3番目のものが空であるということです。
誰かが私が間違っているところについて何か考えがありますか?
編集:私が解析しようとしている文字列は次のとおりです:CREATE INDEX cardSetIndex ON [card](cardSetId ASC)