使用正则表达式从sql字符串中提取字段和值

时间:2014-09-17 15:59:21

标签: php regex

说我有这样的字符串:

$sql = "insert into BENEF (BEN_NOM,BEN_PRENOM,BEN_ADR1,BEN_CREATED_ON,BEN_ENABLED) values ('Houn','Luc','l\"oule (1)','2014-09-17 17:45:08','1');";

如何编写正则表达式来提取:

1 =>好处

2 => BEN_NOM,BEN_PRENOM,BEN_ADR1,BEN_CREATED_ON,BEN_ENABLED

3 => ' Houn'' Luc' l" oule(1)',#09; 2014-09-17 17:45: 08'' 1'

我试过了:

$motif =  '/insert into (.*) \(([^)]*)\) values \(([^)]*)\)/';  
preg_match($motif,$sql , $out);

但不幸的是#34;(1)"数据损坏结果

换句话说,如何使用以下方法提取TABLE X Y.

insert into TABLE (X) values (Y);

为什么这不起作用?

$motif =  '/^insert into (.*) \(([^)]*)\) values \(([^)]*)\);$/'  

此致

最后找到:

'/^insert into (\S+) \((.*)\) values \((.*)\);$/'

1 个答案:

答案 0 :(得分:0)

正则表达式旨在解析"常规"语法和代码语言(SQL,C ++,Python等)是"无上下文"语法(更复杂) - 因此,不应使用正则表达式来解析代码。

如果你的值中没有嵌套的括号,那么你的表达式会起作用,但这是一个不切实际的限制,试图添加到你的应用程序只是为了支持你可以在没有正则表达式的情况下轻松完成的解析。

一些与此理论相呼应的参考答案:

https://stackoverflow.com/a/1758162/334053

https://stackoverflow.com/a/20449679/334053

https://stackoverflow.com/a/133684/334053