PHP正则表达式

44 篇文章 4 订阅
2 篇文章 0 订阅

什么是正则表达式?

正则表达式,又称规则表达式。(英语: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题吧

http://b-regex-1s.lab.aqlab.cn/?id=1

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

来分析分析吧~~~


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


$Regular= preg_match("/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     是匹配到的东西

 

大家去玩玩吧~~~

  • 13
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 使用 PHP正则表达式函数 preg_match() 可以匹配字符串。以下是一个示例: ```php $str = "Hello, World!"; $pattern = "/\bWorld\b/"; if (preg_match($pattern, $str)) { echo "Match found!"; } else { echo "Match not found."; } ``` 这段代码将输出 "Match found!",因为 $str 中包含单词 "World",并且 $pattern 中使用了单词边界 \b 进行匹配。请注意,正则表达式模式需要用斜杠 / 包围。 ### 回答2: PHP正则表达式是一种强大的字符串匹配工具,能够根据特定模式来匹配和处理字符串。在PHP中,可以使用preg_match函数来进行正则表达式的匹配。 preg_match函数接受三个参数,分别是正则表达式模式、目标字符串和可选的匹配结果输出变量。函数会在目标字符串中查找是否存在与正则表达式模式匹配的内容,如果匹配成功,则返回true,否则返回false。 正则表达式模式由特定的字符和符号组成,用于描述需要匹配的字符串规则。例如,使用\d可以匹配一个数字字符,\w可以匹配一个字母数字字符。 对于复杂的正则表达式模式,我们可以使用特定的字符类、量词和分组等特性来实现更准确的匹配。例如,使用[a-z]可以匹配一个小写字母,\d{2,4}可以匹配2到4个数字。 在进行匹配时,可以使用捕获组来提取感兴趣的部分字符串。捕获组是通过在正则表达式模式中使用小括号来定义的,使用圆括号包裹的部分将被定义为一个捕获组。 除了preg_match函数,PHP还提供了许多其他与正则表达式相关的函数,如preg_replace、preg_split等,用于替换、拆分和其他正则表达式操作。 总结来说,PHP正则表达式是一种强大的字符串匹配工具,可以根据特定的模式来匹配和处理字符串。在应用中,我们可以利用它来实现各种字符串操作,如验证、替换、拆分等。 ### 回答3: 在PHP中,正则表达式是一种强大的工具,用于匹配和处理字符串。它可以用于各种字符串操作,例如验证输入,提取数据以及替换特定的字符串。 使用正则表达式的基本步骤是: 1. 定义正则表达式模式,它由特定的字符和元字符组成,用于匹配目标字符串。 2. 使用preg_match函数进行匹配,该函数用于判断目标字符串是否与正则表达式模式匹配。如果匹配成功,则返回1;否则返回0。 3. 可以使用 preg_match_all函数来匹配目标字符串中的所有模式出现。 4. 使用preg_replace函数实现字符串中的替换操作,将匹配到的部分替换为指定的字符串。 5. 使用preg_split函数按照正则表达式模式分割字符串。 例如,如果我们想匹配一个字符串中是否包含数字,可以使用正则表达式模式"/\d/",其中\d表示数字。代码如下: ```php $str = "Hello,123 world"; if(preg_match("/\d/", $str)){ echo "字符串中包含了数字"; } else { echo "字符串中不包含数字"; } ``` 输出结果为:字符串中包含了数字。 以上是关于PHP正则表达式匹配字符串的基本操作,根据具体的需求和匹配规则,可以使用更复杂的模式和函数来实现更精确的匹配和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值