我需要从文本文件中执行数千条查询。
请参阅下面的一种查询:
SELECT *
FROM T1 A
INNER JOIN DB2.dbo.CI_T1 B ON A.id= B.id
LEFT OUTER JOIN T3 C ON B.id = C.id
WHERE ...
有些表名称很好(database.owner.table_name
),有些表没有(table_name
)。
如何使用正则表达式更新每个查询以使用table_name
替换database.owner.table_name
的非限定实例?
我写小提琴来测试它:http://www.phpliveregex.com/p/9SH和http://www.phpliveregex.com/p/9SF
答案 0 :(得分:0)
如果是我,我不会尝试使用正则表达式。虽然像你提供的简单SELECT一样微不足道(虽然你似乎遇到了一些困难),但是你会发现how difficult使用一个简单的正则表达式解析编程语言不久之后。
我从SQL parser开始。
答案 1 :(得分:0)
最后,我使用以下正则表达式与preg_replace
函数:
$regex = '#(FROM)\s+((?!\.)[[:alnum:]_]+)\s+(\w*)\s*(INNER|LEFT|WHERE|\))#i';
$regex2 = '#(JOIN)\s+((?!\.)[[:alnum:]_]+)\s+(\w*)\s*(ON)#i';