Php Eclipse:查找分布在多行中的查询字符串
假设在Eclipse中打开的文件具有以下字符串Php Eclipse:查找分布在多行中的查询字符串,php,regex,eclipse,search,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"; 我需要找到影响学生表和
$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).*?"
虽然使用[^”]*?
而不是*?
可能会更好
编辑:在确保某些条件(如字符串长度、具有特殊字符或smthg)时,让我们切换到它们,因为它们是非常酷的工具: 好的,如果你对正则表达式不感兴趣,你可以停在这里,否则,作为lookaheads的一个例子(注意:这个比较慢): 如果您可以访问原子组,那么最好这样做(): 就像一个单词在第一个字母后不匹配一样,它跳过了其余的单词(它们都有不同的第一个字母) 最后,我想你可以使用:
或者类似的东西。上面的字符串会返回同时包含学生和学校或其中任何一个的字符串吗?第一个和第二个关键字列表的任意组合。我需要确保两个关键字都存在。否则你的答案很酷!哦,这完全是另一种哲学,更新。
(?s)".*?(?:select|alter|insert|delete)(?=[^"]*?student)(?=[^"]*?school).*?"
(?s)"(?=[^"]*?(?:select|alter|insert|delete)(?=[^"]*?student)(?=[^"]*?school).*?"
(?>select|alter|insert|delete)
(?s)".*?(?:select|alter|insert|delete).*?(?:(student)|school)(?(1).*?school|.*?student).*?"