[英]How to find SELECT * statement with regex
我正在我的代码库中搜索所有SELECT *之类的查询,以将其替换为列的实际名称。
我正在尝试建立一个正则表达式,可以查找是否在单词SELECT和FROM之间找到“ *”。
这应该符合以下模式:
#1 SELECT * FROM tablename
#2 SELECT tablename.* FROM tablename
#3 SELECT tb1.col1, tb2.* FROM table tb1, table2 tb2
但不是这个:
#4 SELECT col FROM table
到目前为止,我的尝试(在PhpStorm的搜索框中):
SELECT *
输出:1、2、3和4
我也尝试过正则表达式的答案匹配两个字符串之间的所有字符
(?<=SELECT)(.*)(?=FROM)
输出:1、2、3和4
我在StackOverflow中走得更远,发现了这一点:
SELECT\s+?[^\s]+?\s+?FROM\s+?[^\s]+?\s+?WHERE.
输出:1、2、3和4
你能帮我吗 ?
您遇到的问题是,正则表达式语言中的*
是一个元字符,这意味着它具有特殊的含义,例如.+?[]{}()^$\\
以恢复其字面意思,因此应在它们之前加上\\
或之间方括号。 因此,要匹配*
正则表达式可以是\\*
。 后面的正则表达式使用原子组和先行断言来确保SELECT
和*
之间没有SELECT
或FROM
词
SELECT(?>(?!SELECT|FROM).)*\*
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.