通过正则表达式

时间:2015-12-01 04:29:20

标签: java regex

我目前正致力于数据挖掘项目。我必须阅读一个C#源代码,我必须得到一个SQL语句连接的地方。我真正想要的是获取连接字符串变量名称的名称。

示例:

stat = "SELECT * FROM CUSTOMER c WHERE c.name ='" + name + "' AND c.address = " + address;

我想要提取的是

姓名,地址

这是我用以下正则表达式实现的:

(?<=[\+])\s*(?<=[^\"])(\.|_|[a-zA-Z]|\(\))+(?<=[^\"])\s*(?=\s*\+*)

但是在以下情况下会出现问题。

stat = name + "' AND c.address = " + address;

以下语句不带名称变量。问题是从声明中获取所有变量。

1 个答案:

答案 0 :(得分:1)

正则表达式不是可以治愈所有困境的pancea,在这种情况下,我相信只需拆分包含查询字符串的代码行就可以获得更好的里程数:

String line = "stat = \"SELECT * FROM CUSTOMER c WHERE c.name ='\" + name + \"' AND c.address = \" + address;";

// spilt on the + symbol, and remove the ending semicolon
String[] parts = line.substring(0, line.length()-1).split("\\+");

for (String part : parts) {
    // variables will not be contained in quotation marks
    if (!part.contains("\"")) {
        System.out.println(part.trim());
    }
}

<强>输出:

name
address

请注意,您可能需要添加其他逻辑来确定给定的代码行是否包含SQL查询。在这种情况下,您可以尝试类似line.contains("SELECT")的内容,它将匹配所有SELECT语句。这可以扩展为匹配您希望在代码中看到的各种SQL表达式。