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

时间:2018-09-19 09:05:10

标签: php regex refactoring

我正在我的代码库中搜索所有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

我也尝试了Regex Match all characters between two strings

的答案
(?<=SELECT)(.*)(?=FROM)

输出:1、2、3和4

我在StackOverflow中走得更远,发现了这个:

SELECT\s+?[^\s]+?\s+?FROM\s+?[^\s]+?\s+?WHERE.

输出:1、2、3和4

能帮我吗?

1 个答案:

答案 0 :(得分:1)

您遇到的问题是,正则表达式语言中的*是一个元字符,这意味着它具有.+?[]{}()^$\之类的特殊含义,以恢复其字面意思,因此应在它们之前加上{{1 }}或方括号之间。 因此,要匹配\,则正则表达式可以为*。 遵循regex的对象使用原子组和前瞻性断言,以确保\*SELECT

之间没有FROMSELECT
*