【发布时间】:2018-02-24 17:09:09
【问题描述】:
我搜索了高位和低位,真的很难找到合适的正则表达式来帮助我检索我想要的东西。假设我有以下查询字符串:
SELECT col, col2 AS c2, col3, col * col2 calc FROM...
我想要一个正则表达式,它可以提取逗号之间的所有内容,其中有空格或“AS”,然后是列别名。它还应该排除 SELECT 和 FROM。对于上面的示例,我想要以下匹配项:
col2 AS c2
col * col2 calc
本质上,这应该删除 col 和 col3,因为它们没有别名。我尝试了以下变体但没有成功(注意:$colname 包含别名):
/(SELECT|,)([^,]*{$colname}[^,]*)(FROM|,)/
目前这只返回:
, col2 AS c2,
col2 AS c2
, col2 AS c2,
col2 AS c2
我觉得我很接近,但我需要一些指导。任何建议表示赞赏。
【问题讨论】:
-
感谢您的宝贵时间。这删除了所有 , col2 AS c2 但没有让我 col * col2 calc.
-
正则表达式是解析任何东西的错误工具。使用 SQL 解析器,这将更容易和更可靠。谷歌发现例如github.com/greenlion/PHP-SQL-Parser
-
preg_match只返回第一个匹配项。 -
@Dustin,使用
[\p{S}\p{P}]匹配任何标点符号/符号。或[[:punct:]]