【发布时间】:2015-10-02 09:08:48
【问题描述】:
我正在尝试为此任务创建一个正则表达式,但除了非常简单的情况外,我真的无法掌握对正则表达式的理解:-( :
问题:我有这个(“SQL like”)查询:
SELECT tcmcs003.*, tccom130.nama, tccom705.dsca, tcmcs052.dsca, tccom100.nama
FROM tcmcs003, tccom130,tccom705,tcmcs052,tccom100
WHERE tcmcs003.cadr REFERS TO tccom130
AND tcmcs003.casi REFERS TO tccom705
AND tcmcs003.cprj REFERS TO tcmcs052
AND tcmcs003.bpid REFERS TO tccom100
ORDER BY tcmcs003._index1
我想“提取”所有表名和列名,然后我想简单地将我的字符添加到它们... 例如替换:
SELECT tcmcs003.*, tccom130.nama
与:
SELECT tcmcs003XXX.*, tccom130XXX.namaYYY
到目前为止,我拥有的“最佳”正则表达式是这样的:
(?<gselect>SELECT\s+)*(?<tname>\w{5}\d{3})*(?<spaces>[\.\,\s])+(?<colname>\w{4})*
和替换模式:
${gselect}${tname}XXX${spaces}${colname}YYY
输出真的很糟糕:-(
SELECT tcmcs003.
m130
.nama
m705
.dsca
s052
.dsca
m100
.nama
FROM
s003
m130
,m705
,s052
,m100
WHER
s003
.cadr
REFE
m130
s003
如何编写正则表达式?
我想反复捕捉像
[(any string)(table name)(\.a dot or not)(column name)(any string) ] (repeat N times)
编辑
我正在用 C# 编写
该模式应该更通用一点: \b(tc(?:mcs|com)\d{3}XXX.\w+)\b
表名是 5 个字符(第一个始终是 t,后跟 4 个随机字符)后跟 3 个随机数字
表格列是 4 个随机字符
【问题讨论】: