数据库命名的正则表达式

时间:2015-02-04 16:30:38

标签: php sql regex

我需要从文本文件中执行数千条查询。

请参阅下面的一种查询:

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/9SHhttp://www.phpliveregex.com/p/9SF

2 个答案:

答案 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';