php - Eclipse:查找分布在多行中的查询字符串

标签 php regex eclipse search

假设在 Eclipse 中打开的文件具有以下字符串

$stmt = "select addr from 
         student
         where id=123";

$stmtA = "alter table tablename";

$stmtB = " delete from student
    where school=ABC";

$var1 = "This is not a query.
         Just a string";

我需要找到影响学生表和学校列的所有查询语句。搜索方式:

(?s)"(.*?)"

给我所有被引用并分布在多行中的字符串。现在,我如何增强上述正则表达式来过滤结果,以确保结果具有

1) 选择或更改或插入或删除MySQL的关键字, 和 2) 学生和学校关键字。

我认为满足上述两个条件后,我将能够提取命中学生表和学校列的字符串。有什么帮助吗?

最佳答案

(?s)".*?(?:select|alter|insert|delete).*?(?:student|school).*?"

尽管使用 [^"]*? 而不是 .*? 可能会更好。

编辑:
让我们切换到lookaheads因为在确保某些条件(如字符串长度、具有特殊的字符或 smthg)时它们是非常酷的工具:

(?s)".*?(?:select|alter|insert|delete)(?=[^"]*?student)(?=[^"]*?school).*?"

好吧,如果您对正则表达式不感兴趣,您可以停在这里,否则,作为前瞻的示例(注意:这较慢):

(?s)"(?=[^"]*?(?:select|alter|insert|delete)(?=[^"]*?student)(?=[^"]*?school).*?"

如果您有权访问原子组,那么最好这样做 ( atomic grouping ):

(?>select|alter|insert|delete)

就像第一个字母之后的一个单词无法匹配一样,它会跳过其余的单词(它们都有不同的第一个字母)。

最后,我想你可以使用 if/then/else :

(?s)".*?(?:select|alter|insert|delete).*?(?:(student)|school)(?(1).*?school|.*?student).*?"

或者类似的东西。

关于php - Eclipse:查找分布在多行中的查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15763134/

相关文章:

c++ - Eclipse (C++) 的 undefined reference 错误

在命令行中执行但不在浏览器中执行的 Java 文件

php - 如何使用 jquery 删除 mysql 中的行表?

php - 如何在特定时间段自动运行PHP代码?

javascript - 如何将字符串转换为插值字符串?

regex - R正则表达式获取单引号之间的文本

Java反编译器插件不工作

PHP If 语句在 MySQL boolean 列返回上返回 false

java - 用不包含在双引号中的逗号拆分字符串

Eclipse m2e "Update Maven Project"添加了不需要的 bin 目录