日期:2014-05-17 浏览次数:20558 次
<?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);
------解决方案--------------------
<?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]);
------解决方案--------------------
名称里面可以出现什么符号 往中括号里面加就行了 比如你说的() [\w@#`()]
我只能保证数据库名两边同时出现 ` 或者同时不出现 `,不能控制里面 ` 的数量
------解决方案--------------------
preg_match_all('/CREATE\s+DATABASE\s*((([`\'"])?)([\w[:punct:]]+)\2\s?)/is',$sql,$matchs);
------解决方案--------------------
试下
$databases = <<<db
CREATE DATABASE `aaab`
CREATE DATABASE aaab
CREATE DATABASE `aaab`
CREATE DATABASE `aaa@@@#b`
CREATE DATABASE `aaa2``b`` `
CREATE DATABASE aaab DEFAULT CHARACTER SET utf8 COLLAT……
db;
preg_match_all(
'~create\s+database\s+
(
(?:`(?=[^`]*``(?=[^`]+))(.*)`) #`引住带双`的
|
(?:`([^`]+)`) #`引住不带`的
|
(?:([a-z0-9]+)) #不带`的
)
~xis',$databases,$m);
print_r($m);
------解决方案--------------------
上面的不行,``中间的`必须是偶数位。。这个比较麻烦。
------解决方案--------------------