繁体   English   中英

匹配模式TEXT [0,0]

[英]Match the pattern TEXT[0,0]

我有很多带有SQL查询的源代码,如下所示:

c_query := "SELECT * FROM TABLE WHERE FIELD_NAME_ONE[2] = 'AB' AND FIELD_NAME_TWO[1,8] = 'ABCDEFGH'"

我想匹配这些: FIELD_NAME_ONE[2]FIELD_NAME_TWO[1,8] ,必须在双引号( " )之间找到这些模式。

编辑

c_query:=“SELECT * FROM TABLE WHERE FIELD_NAME_ONE [2] ='AB'AND FIELD_NAME_TWO [1,8] ='ABCDEFGH'AND TESTE [9] ='XXXXXXXXX'AND FOO ='”+ is_an_array [2] +“' “

它不应该与is_an_array [2]匹配,因为它不在双引号内。

这是您所寻求的正则表达式模式(根据评论编辑):

".*?[A-Z_]+\[\d(,\d)?\].*?"

我让比赛非贪婪( .*? ),以防一线上有多个比赛(不太可能,但为了完整......)

编辑

如果你想匹配目标字段的名称或整个SQL目前尚不清楚。 如果您只想匹配字段名称,请使用非捕获组:

(?:".*?)[A-Z_]+\[\d(,\d)?\](?:.*?")

我假设您希望能够匹配的不仅仅是这两个特定字段,否则您不会遇到应用正则表达式的麻烦:

var tokens = Regex.Matches(sql, "\"([^\"]+)\"");

foreach (Match token in tokens) {
    string str = token.Groups[1].Value;

    var fields = Regex.Matches(str, @"(\w+\[\d+(,\d+)*\])");

    foreach (Match field in fields)
        Console.WriteLine(field.Value);
}

这将找到任何字母,数字和下划线的序列,后跟方括号,带有1个或多个以逗号分隔的数字。

如果您只想在方括号前匹配一系列字母和下划线,请将模式修改为:

@"([a-zA-Z_]+\[\d+(,\d+)*\])"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM