Php 使用正则表达式在字符串中最后一次出现后获取
我有一个SQL字符串,需要从主“from”值获取表名。我需要找到最后一个“FROM”事件,它可能有也可能没有附加约束。以下是字符串的几种显示方式:Php 使用正则表达式在字符串中最后一次出现后获取,php,regex,Php,Regex,我有一个SQL字符串,需要从主“from”值获取表名。我需要找到最后一个“FROM”事件,它可能有也可能没有附加约束。以下是字符串的几种显示方式: $input = "SELECT title, (SELECT name FROM Contact WHERE name = 'foo') as name FROM Account WHERE title = 'president'"; $input = "SELECT title, (SELECT name FROM Contact WHERE n
$input = "SELECT title, (SELECT name FROM Contact WHERE name = 'foo') as name FROM Account WHERE title = 'president'";
$input = "SELECT title, (SELECT name FROM Contact WHERE name = 'foo') as name FROM Account LIMIT 1";
$input = "SELECT title, (SELECT name FROM Contact WHERE name = 'foo') as name FROM Account OFFSET 3";
$input = "SELECT title, (SELECT name FROM Contact WHERE name = 'foo') as name FROM Account ANYTHING_HERE_REALLY";
$input = "SELECT title, (SELECT name FROM Contact WHERE name = 'foo') as name FROM Account";
所有项目的预期产出为:账户
从搜索论坛的任何游戏来看,这是我要走的方向,但我知道这是不正确的
preg_match('/.*FROM\s([^]]+)\sWHERE/', $input, $output);
首先,将正则表达式用于级联内容(如级联查询)是一种不好的做法。但是我们走了 只需在FROM之后匹配非空格序列 注:由于《哈利波特》中克莱恩之星的贪婪,它肯定会寻找最新的比赛。您的模式实际上旨在通过期望WHERE子句来过度指定问题 带有给定示例和交互式php的示例-a:
这应该适合您:
preg_match_all('/FROM\s?(\S+)/', $input, $output);
$输出:
Array
(
[0] => Array
(
[0] => FROM Contact
[1] => FROM Account
)
[1] => Array
(
[0] => Contact
[1] => Account
)
)
精彩的你不是唯一一个关心在查询语法中使用正则表达式的人,但它确实是为了提供信息,所以我不介意,出于某种奇怪的原因,是否什么都不返回。我很感激你仔细考虑了这个事实。这正是我在最后一个小时里想要完成的。
preg_match_all('/FROM\s?(\S+)/', $input, $output);
Array
(
[0] => Array
(
[0] => FROM Contact
[1] => FROM Account
)
[1] => Array
(
[0] => Contact
[1] => Account
)
)