我有以下正则表达式,它可以让我获得创建索引语句的表名和列详细信息:
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])];
这部分有效。它给了我三个范围。第一个包含整个字符串,第二个包含表名。问题是第三个是空的。
有人知道我哪里出错了吗?
编辑:我要解析的字符串是: CREATE INDEX cardSetIndex ON [card] (cardSetId ASC)