C# 正则表达式到 NSRegularExpression

本文关键字:NSRegularExpression 正则表达式 | 更新日期: 2023-09-27 18:37:18

>我有以下正则表达式,它为我获取创建索引语句的表名和列详细信息:

        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])];

这部分有效。它给了我三个范围。第一个包含整个字符串,第二个包含表名。问题是第三个是空的。

有人知道我哪里出错了?

编辑:我尝试解析的字符串是:创建索引卡设置索引在[卡]上(cardSetId ASC)

C# 正则表达式到 NSRegularExpression

您似乎遇到的问题是第二个捕获组被(?: )*的最后一次迭代覆盖。由于它是可选的,所以它总是空白的。

您的正则表达式:

 create's*index.*?'son's*
 '[?
     ( ['s'w]*'w )
 ']?'s*
 '(
     (?:
        ( ['s'd'w'[']]* )
        ,?
     )*
 ')

将其更改为:

 create's*index.*?'son's*
 '[?
    ( ['s'w]*'w )
 ']?
 's*
 '(
    (
      (?: ['s'd'w'[']]* ,? )*
    )
 ')

压缩和转义:

create''s*index.*?''son''s*''[?([''s''w]*''w)'']?''s*''(((?:[''s''d''w''['']]*,?)*)'')

你的问题对你真正想要抓取的东西有点模糊,而且正则表达式非常粗糙,所以我无法从中收集到它。

CREATE's*INDEX's*('w+)'s*ON's*('['w+'])'s*'((.+)')

这将获取组 1 中的表名、组 2 中的 ON 属性以及组 3 中的以下属性。

相关文章:
  • 没有找到相关文章