백엔드 개발 PHP 튜토리얼 来问一个有关问题,正则匹配创建数据库SQL的数据库名称

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

Jun 13, 2016 pm 01:34 PM
create database sql

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



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

名称有可能没有``,有可能没有空格
无可能
------解决方案--------------------

PHP code
<?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 code
<?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>
로그인 후 복사
探讨
就是说只要用上`` 名字里可以有任何符。

没用上`的话 名字只能用字母与数字,而且前面要加个空格与DATABASE文字分隔开。

------解决方案--------------------
那串符号可以用[:punct:]表示,[:punct:]代表标点符号字符 类似的还有[:alnum:] [:space:] ... 各表示几种类型的字符串
可以修改如下
PHP code
preg_match_all('/CREATE\s+DATABASE\s*((([`\'"])?)([\w[:punct:]]+)\2\s?)/is',$sql,$matchs);
<br><font color="#e78608">------解决方案--------------------</font><br>
试下<br>
로그인 후 복사
PHP code
$databases = <font color="#e78608">------解决方案--------------------</font><br>上面的不行,``中间的`必须是偶数位。。这个比较麻烦。
<br><font color="#e78608">------解决方案--------------------</font><br>
로그인 후 복사
探讨


没错啊。``中间的`是偶数位能匹配出来就没问题。为单数的话说明是有问题的SQL了,不需考虑。

你上面的`aaa````bbb` 匹配不了哦。

引用:

上面的不行,``中间的`必须是偶数位。。这个比较麻烦。
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Hibernate 프레임워크에서 HQL과 SQL의 차이점은 무엇입니까? Hibernate 프레임워크에서 HQL과 SQL의 차이점은 무엇입니까? Apr 17, 2024 pm 02:57 PM

Hibernate 프레임워크에서 HQL과 SQL의 차이점은 무엇입니까?

discuz 데이터베이스 오류를 해결하는 방법 discuz 데이터베이스 오류를 해결하는 방법 Nov 20, 2023 am 10:10 AM

discuz 데이터베이스 오류를 해결하는 방법

누출로 Intel Arrow Lake-U, -H, -HX 및 -S의 주요 사양 공개 누출로 Intel Arrow Lake-U, -H, -HX 및 -S의 주요 사양 공개 Jun 15, 2024 pm 09:49 PM

누출로 Intel Arrow Lake-U, -H, -HX 및 -S의 주요 사양 공개

Oracle SQL의 나누기 연산 사용법 Oracle SQL의 나누기 연산 사용법 Mar 10, 2024 pm 03:06 PM

Oracle SQL의 나누기 연산 사용법

SQL의 ID 속성은 무엇을 의미합니까? SQL의 ID 속성은 무엇을 의미합니까? Feb 19, 2024 am 11:24 AM

SQL의 ID 속성은 무엇을 의미합니까?

Oracle과 DB2의 SQL 구문 비교 및 ​​차이점 Oracle과 DB2의 SQL 구문 비교 및 ​​차이점 Mar 11, 2024 pm 12:09 PM

Oracle과 DB2의 SQL 구문 비교 및 ​​차이점

MyBatis 동적 SQL 태그의 Set 태그 기능에 대한 자세한 설명 MyBatis 동적 SQL 태그의 Set 태그 기능에 대한 자세한 설명 Feb 26, 2024 pm 07:48 PM

MyBatis 동적 SQL 태그의 Set 태그 기능에 대한 자세한 설명

Java는 MySQL 드라이버 인터셉터를 어떻게 사용하여 SQL 시간이 많이 소요되는 계산을 구현합니까? Java는 MySQL 드라이버 인터셉터를 어떻게 사용하여 SQL 시간이 많이 소요되는 계산을 구현합니까? May 27, 2023 pm 01:10 PM

Java는 MySQL 드라이버 인터셉터를 어떻게 사용하여 SQL 시간이 많이 소요되는 계산을 구현합니까?

See all articles