我写了这个正则表达式,允许你匹配表名。问题是它还匹配表字段(AAA_BBB_CCC_DDD)。
我希望它与SELECT之后的字段表不匹配。
(^|,?\s*)([A-Z]+(_[A-Z]+){2,})(,?\s*|$)
谢谢。
答案 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*|$)"