繁体   English   中英

如何使用正则表达式查找SELECT *语句

[英]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*之间没有SELECTFROM

SELECT(?>(?!SELECT|FROM).)*\*

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM