应用系统定制开发PHP正则表达式

应用系统定制开发什么是应用系统定制开发正则表达式?

正则表达式,应用系统定制开发又称规则表达式。(英语:Regular Expression,应用系统定制开发在代码中常简写为regex、regexp或RE),应用系统定制开发计算机科学的一个概念。应用系统定制开发正则表达式通常被用来检索、应用系统定制开发替换那些符合某个模式(规则)的文

应用系统定制开发正则表达式的特点:

1. 灵活性、应用系统定制开发逻辑性和功能性非常强;

2. 可以迅速地用极简单的方式达到字符串的复杂控制。

3. 对于刚接触的人来说,比较晦涩难懂。

正则表达式用途

判断字符串是否符合某一规则(判断是否符合手机号、邮箱规则)。

从一个字符串中找出符合规则的所有子字符串(取HTML标签名)。

正则表达式的格式?

"/表达式/[修饰符]"

当使用正则表达式时要注意什么?

PHP中使用正则规则一定要加代表正则的标识 / /

php中正则表达式常用相关函数是什么

Preg_match_all(正则表达式、匹配字符串、匹配到的东西放入数组)

该函数会返回匹配到的次数(可能是0),或者如果发生错误返回FALSE

preg_replace(正则表达式、替换成什么、匹配字符串)

该函数会返回替换后的结果

正则表达式的语法——字符(一)

数字:\d

非数字:\D

空白字符(空格、、换页符等):\s

非空白字符:\S

单词字符(26个英文字母+数字+下划线):\w

非单词字符:\W

正则表达式的语法——字符(二)

字符集合:[单个字符或字符区间],用于匹配集合内字符

比如:

[a-z]表示a-z这26个小写字母

[0-9a-z]表示0-9这10个数字和a-z这26个小写字母

[123a-h]表示包含数字1,2,3和a-h这8个字母

注意:两个不同的字符段间一定不要用逗号隔开

非集合字符:[^单个字符或字符区间],用于匹配非集合内字符

比如:

[^0-9]表示匹配所有非数字字符

[^a-zA-Z]表示匹配所有非字母字符

字符集合的数字区间该注意什么?

数字区间正则只能匹配0-9的数字,因为正则只能一位一位的匹配,所以超过9以外的数字只是我们给的概念,对于正则机制来说它是认不到的,比如[100-120]就无法被匹配

正则表达式的语法——关键字

() 表示一个整体

^ 匹配输入字符串的开始位置

$ 匹配输入字符串的结尾位置

. 通配符,代表任意字符但不匹配换行

* 匹配0次或者多次

+ 匹配1次或者多次

\

| 两项之间的一个选择

转义字符“\”的使用

转义字符主要是将一些特殊字符转为普通字符。而这些常用特殊字符有”.”、”?”、”\”等

^和$结合使用的注意问题

如果^和$结合使用且中间没有其他表达式,那么他们中间就不能出现别的字符,不然无法匹配,比如/^3b$/表示3开头b结尾,所以只有3b才能被匹配,如果写了3acb就无法被匹配。什么情况下才能被匹配呢,可以使用.(通配符)。

非集合字符的“^”和关键字“^”的区别

非集合字符的“^”可理解为排除字符,排除操作,一般放在[]中,如[^1-5], 表示该字符不是1-5之间的数字;而关键字的“^”表示行开始,如"^ab"表示以ab开头的字符串。

正则表达式的语法——限定符

{n} 例如0{8} 表示只有连起来8个0才会被匹配

{n,} 例如0{2,} 表示只要2个0及其以上的就会被匹配

{n,m} 例如0{2,4} 表示最少匹配2个0,最多匹配4个0

注:被匹配时,默认匹配最多的次数

正则表达式的语法——修饰符

i 表示不区分大小写

A 匹配规则必须从头开始匹配

s 表示.将匹配一切字符

x 表示正则表达式中的空白字符会被忽略

e 代码执行仅限preg_replace()

匹配模式的优先级是什么?(优先级从高到低排) 

\转义字符;()[]大原子和原子表;*+?{n}{n,}{n,m}重复匹配(匹配次数);^$\b\B边界限制;|模式选择

好了,该说的都说完了

可以来看CTF题吧

  1. <?php
  2. $key='flag{********************************}';
  3. $Regular= preg_match("/zkaq.*key.{2,9}:\/.*\/(key*key)/i", trim($_GET["id"]), $match);
  4. if( $Regular ){
  5. die('key: '.$key);
  6. }

来分析分析吧~~~


$key='flag{********************************}';   很明显flag就是这个


$Regular= ("/zkaq.*key.{2,9}:\/.*\/(key*key)/i", trim($_GET["id"]), $match); 
这就是flag能出来的条件

又上面说过

Preg_match_all(正则表达式、匹配字符串、匹配到的东西放入数组)

该函数会返回匹配到的次数(可能是0),或者如果发生错误返回FALSE

所以,

/zkaq.*key.{2,9}:\/.*\/(key*key)/i   是正则表达式

/zkaq.*key.{2,9}:\/.*\/(key*key)/i 

/i     这是修饰符,表示我们输入的key值不限制大小写

zkaq     这是字符串的内容

.*      表示任意字符的任意次数,输入什么都可以

key    这个是字符串的内容

.{2,9}  表示 最少匹配2个任意字符,最多匹配9个任意字符

:          直接复制下来

\/         表示对斜杠/进行转义,就是直接将/使用

(key*key)    ()是关键字,表示key*key是一个整体,*是匹配y的次,即key*key中只能有0个或者多个y

所以呀,flag可以是 

zkaq--key--:/--/kekey

zkaq22key222222:/4444/kekeyyy

trim($_GET["id"])    是要匹配的字符串

trim() 方法用于删除字符串的头尾空白符,空白符包括:空格、制表符 tab、换行符等其他空白符等。在这里匹配的是id

$match     是匹配到的东西

 

大家去玩玩吧~~~

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发