当前位置:Gxlcms > PHP教程 > 来问一个有关问题,正则匹配创建数据库SQL的数据库名称

来问一个有关问题,正则匹配创建数据库SQL的数据库名称

时间:2021-07-01 10:21:17 帮助过:4人阅读

来问一个问题,正则匹配创建数据库SQL的数据库名称?
要考虑所有情况,只要能创建数据库的SQL的名称都要匹配出来哦。
名称有可能没有``,有可能没有空格,有可能没有修饰关键字等...



------解决方案--------------------
/create\s+database\s+(\w+)/is

名称有可能没有``,有可能没有空格
无可能
------解决方案--------------------
PHP code
  1. <!--?php
  2. $sql=<<<SQL
  3. CREATE DATABASE `aaab`'
  4. CREATE DATABASE aaab
  5. CREATE DATABASE`aaab`
  6. CREATE DATABASE`aaa@@@#b`
  7. CREATE DATABASE`aaa``b`
  8. SQL;
  9. preg_match_all('/CREATE\s+DATABASE\s?((`?)[\w@#]+\2)+/is',$sql,$matchs);
  10. print_r($matchs);
  11. <br /--><font color="#e78608">------解决方案--------------------</font><br><dl class="code">PHP code<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><!--?php</li><li>$sql=<<<SQL</li><li>CREATE DATABASE `aaab`'</li><li>CREATE DATABASE aaab</li><li>CREATE DATABASE`aaab`</li><li>CREATE DATABASE`aaa@@@#b`</li><li>CREATE DATABASE`aaa``b`</li><li>CREATE DATABASE aaab DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci</li><li>SQL;</li><li>preg_match_all('/CREATE\s+DATABASE\s*(([`\'"]?)([\w@#`]+)\2\s?)/is',$sql,$matchs);</li><li>print_r($matchs[3]);</li><li><br /--><font color="#e78608">------解决方案--------------------</font><br>名称里面可以出现什么符号 往中括号里面加就行了 比如你说的() [\w@#`()]<br>我只能保证数据库名两边同时出现 ` 或者同时不出现 `,不能控制里面 ` 的数量</li><li><br><font color="#e78608">------解决方案--------------------</font><br><fieldset><legend>探讨</legend><br>就是说只要用上`` 名字里可以有任何符。<br><br>没用上`的话 名字只能用字母与数字,而且前面要加个空格与DATABASE文字分隔开。<br></fieldset></li><li><br><font color="#e78608">------解决方案--------------------</font><br>那串符号可以用[:punct:]表示,[:punct:]代表标点符号字符 类似的还有[:alnum:] [:space:] ... 各表示几种类型的字符串<br>可以修改如下<br><dl class="code">PHP code<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li>preg_match_all('/CREATE\s+DATABASE\s*((([`\'"])?)([\w[:punct:]]+)\2\s?)/is',$sql,$matchs);</li><li><br><font color="#e78608">------解决方案--------------------</font><br></li><li>试下<br><dl class="code">PHP code<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li>$databases = <<<db create="" database="" `aaab`="" aaab="" `aaa@@@#b`="" `aaa2``b``="" `="" default="" character="" set="" utf8="" collat……="" db;="" preg_match_all(="" '~create\s+database\s+="" (="" (?:`(?="[^`]*``(?=[^`]+))(.*)`)" #`引住带双`的="" |="" (?:`([^`]+)`)="" #`引住不带`的="" (?:([a-z0-9]+))="" #不带`的="" )="" ~xis',$databases,$m);="" print_r($m);="" <br=""><font color="#e78608">------解决方案--------------------</font><br>上面的不行,``中间的`必须是偶数位。。这个比较麻烦。</li><li><br><font color="#e78608">------解决方案--------------------</font><br><fieldset><legend>探讨</legend><br><br><br>没错啊。``中间的`是偶数位能匹配出来就没问题。为单数的话说明是有问题的SQL了,不需考虑。<br><br>你上面的`aaa````bbb` 匹配不了哦。<br><br>引用:<br><br>上面的不行,``中间的`必须是偶数位。。这个比较麻烦。<br></fieldset> </db></li></ol></pre></dl></li></ol></pre></dl></li></ol></pre></dl>

人气教程排行