来问一个问题,正则匹配创建数据库SQL的数据库名称?
要考虑所有情况,只要能创建数据库的SQL的名称都要匹配出来哦。
名称有可能没有``,有可能没有空格,有可能没有修饰关键字等...
------解决方案--------------------
/create\s+database\s+(\w+)/is
名称有可能没有``,有可能没有空格
无可能
------解决方案--------------------
<?php $sql=<<<SQL
CREATE DATABASE `aaab`'
CREATE DATABASE aaab
CREATE DATABASE`aaab`
CREATE DATABASE`aaa@@@#b`
CREATE DATABASE`aaa``b`
SQL;
preg_match_all('/CREATE\s+DATABASE\s?((`?)[\w@#]+\2)+/is',$sql,$matchs);
print_r($matchs);
<br /><font color="#e78608">------解决方案--------------------</font><br>
<?php $sql=<<<SQL
CREATE DATABASE `aaab`'
CREATE DATABASE aaab
CREATE DATABASE`aaab`
CREATE DATABASE`aaa@@@#b`
CREATE DATABASE`aaa``b`
CREATE DATABASE aaab DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
SQL;
preg_match_all('/CREATE\s+DATABASE\s*(([`\'"]?)([\w@#`]+)\2\s?)/is',$sql,$matchs);
print_r($matchs[3]);
<br /><font color="#e78608">------解决方案--------------------</font><br>名称里面可以出现什么符号 往中括号里面加就行了 比如你说的() [\w@#`()]<br>我只能保证数据库名两边同时出现 ` 或者同时不出现 `,不能控制里面 ` 的数量
<br><font color="#e78608">------解决方案--------------------</font><br>
preg_match_all('/CREATE\s+DATABASE\s*((([`\'"])?)([\w[:punct:]]+)\2\s?)/is',$sql,$matchs);
<br><font color="#e78608">------解决方案--------------------</font><br>
试下<br>$databases = <font color="#e78608">------解决方案--------------------</font><br>上面的不行,``中间的`必须是偶数位。。这个比较麻烦。 <br><font color="#e78608">------解决方案--------------------</font><br>
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号