正则表达式匹配表名

时间:2015-04-24 09:27:13

标签: regex

我写了这个正则表达式,允许你匹配表名。问题是它还匹配表字段(AAA_BBB_CCC_DDD)。

我希望它与SELECT之后的字段表不匹配。

(^|,?\s*)([A-Z]+(_[A-Z]+){2,})(,?\s*|$)

谢谢。

1 个答案:

答案 0 :(得分:0)

string request = "ODS_HIST_PS_AF_C_APPTMNT ,(SELECT AF_CONTRACT_ID,MAX(EFFDT) AS  EFFDT FROM ODS_HIST_PS_AF_C_APPTMNT GROUP BY AF_CONTRACT_ID ) REQ_MAX";

string pattern = @"(^|,?\s*)(?<!(SELECT\s+|BY\s+))([A-Z]+(_[A-Z]+){2,})(,?\s*|$)";

foreach (Match match in Regex.Matches(request, pattern))
{
    s.Add(match.Value);
}

这会返回以下表名:

  

ODS_HIST_PS_AF_C_APPTMNT =&gt;行

     

F_CONTRACT_ID =&gt;否(FIELD)

     

F_CONTRACT_ID,=&gt;否(FIELD)

     

ODS_HIST_PS_AF_C_APPTMNT =&gt;行

正则表达式:

"(^|,?\s*)(?<!(SELECT\s+|BY\s+))([A-Z]+(_[A-Z]+){2,})(,?\s*|$)"

我找到了这个:Regex lookahead, lookbehind and atomic groups