我正在我的代码库中搜索所有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
能帮我吗?
答案 0 :(得分:1)
您遇到的问题是,正则表达式语言中的*
是一个元字符,这意味着它具有.+?[]{}()^$\
之类的特殊含义,以恢复其字面意思,因此应在它们之前加上{{1 }}或方括号之间。
因此,要匹配\
,则正则表达式可以为*
。
遵循regex的对象使用原子组和前瞻性断言,以确保\*
和SELECT
FROM
或SELECT
词
*