章节
问答
课签
笔记
评论
占位
占位

元字符与转义

正则表达式中具有特殊含义的字符称之为元字符,常用的元字符有:

\ 一般用于转义字符
^ 断言目标的开始位置(或在多行模式下是行首)
$ 断言目标的结束位置(或在多行模式下是行尾)
. 匹配除换行符外的任何字符(默认)
[ 开始字符类定义
] 结束字符类定义
| 开始一个可选分支
( 子组的开始标记
) 子组的结束标记
? 作为量词,表示 0 次或 1 次匹配。位于量词后面用于改变量词的贪婪特性。 (查阅量词)
* 量词,0 次或多次匹配
+ 量词,1 次或多次匹配
{ 自定义量词开始标记
} 自定义量词结束标记

//下面的\s匹配任意的空白符,包括空格,制表符,换行符。[^\s]代表非空白符。[^\s]+表示一次或多次匹配非空白符。
$p = '/^我[^\s]+(苹果|香蕉)$/';
$str = "我喜欢吃苹果";
if (preg_match($p, $str)) {
    echo '匹配成功';
}

元字符具有两种使用场景,一种是可以在任何地方都能使用,另一种是只能在方括号内使用,在方括号内使用的有:

\ 转义字符
^ 仅在作为第一个字符(方括号内)时,表明字符类取反
- 标记字符范围

其中^在反括号外面,表示断言目标的开始位置,但在方括号内部则代表字符类取反,方括号内的减号-可以标记字符范围,例如0-9表示0到9之间的所有数字。

//下面的\w匹配字母或数字或下划线。
$p = '/[\w\.\-]+@[a-z0-9\-]+\.(com|cn)/';
$str = "我的邮箱是Spark.eric@imooc.com";
preg_match($p, $str, $match);
echo $match[0];

任务

请编写一个模式,用户匹配目标字符串中的电话号码。(提示:\d匹配数字)

?不会了怎么办

将变量$p的表达式修改为:

$p = '/\d+\-\d+/';
||
1
2
<?php
//p
    
    使
    str
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
提交
重置代码
||

请验证,完成请求

由于请求次数过多,请先验证,完成再次请求

加群二维码

打开微信扫码自动绑定

您还未绑定服务号

绑定后可得到

  • · 粉丝专属优惠福利
  • · 大咖直播交流干货
  • · 课程更新,问题答复提醒
  • · 账号支付安全提醒

收藏课程后,能更快找到我哦~

使用 Ctrl+D 可将课程添加到书签

邀请您关注公众号
关注后,及时获悉本课程动态

举报

0/150
提交
取消
全部 精华 我要发布

最新回答 / awula
因为数字不是行首

最新回答 / Implicit_F
[^\s]代表非空白符。[^\s]+表示一次或多次匹配非空白符。^在括号外时表示开始,在括号[]内第一位表示取反,所以\s是空白,在括号内^\s是非空白。

最赞回答 / 啊啊哈哈0
先说 要匹配 - (短横线),如果在[ ]中,一定要加转义符号 / ,不然默认是 到 即表示一个区间;再说 不在 [ ]中的情况,加不加 \ 无所谓,因为本来 - 在 [ ]外不需要转义,加上转义字符并不起作用;你可能会想问什么 2) 不匹配 \ 转义字符呢,因为要匹配 \ ,得写成 \\ ;

最赞回答 / qq_慕勒8428175
如果短横线-是在方括号[]内,则需要使用反斜杠\转义,因为短横线-在方括号[]内有特殊含义,代表了字符的范围,如[0-9],0-9之间的所有数字。反之,如果短横线-在方括号[]外,因为-在方括号外不具有特殊含义,不需要进行转义。但是你发现,即使你在方括号外对不需要转义的字符,如这里的-使用了转义符\写成\-也是可以的,这样可以提高代码的可读性,编译器应该在编译的时候会发现不需要它实际上不需要转义而对其忽略。顺便说一下,如果你想使用字符\的话,需要对其进行转义写成\\,这样匹配出来的才是\字符,在方括号内外...

已采纳回答 / 慕后端8493566
preg_match — 执行一个正则表达式匹配preg_match ( $pattern , $subject , $matches )搜索subject与pattern给定的正则表达式的一个匹配.参数 :pattern : 要搜索的模式,字符串类型(正则表达式)。subject : 输入的字符串。matches :(可有可无)如果提供了参数matches,它将被填充为搜索结果。 $matches[0]将包含完整模式匹配到的文本, $matches[1] 将包含第一个捕获子组匹配到的文本,以此类推。返...

最新回答 / 影_
输出失败应该不符合这题的答案吧。 而且你苹果改了肯定匹配不成功,正则表达式中的 $ 意思是以前面的值为结尾,苹果都没了,$str最后是苹果。

最赞回答 / 慕盖茨4340045
因为使用了cookie,cookie里的数据太容易让别人拿到了,所以先把数据转成别人不认识的,就算被别人通过cookie拿到这条数据也无妨,他看不懂,他也不知道密匙,无法解密,这么一个加密解密的过程让数据有了安全的保障、不会被有心人偷到。

已采纳回答 / Super_Lin
表示一个数量、重复前一个匹配的次数(一次或多次)。例如:[0-9]+    表示匹配数字多次。可匹配1、123等

已采纳回答 / 慕粉1465057122
你可以这样写,$p='\(?0\d{2}[) -]?\d{8}';或者$p=/^0\d{2}-\d{8}$/i;形式不固定;基于你的问题:$p = '/[0]\d{2}\-\d{8}/';为什么不加[]就不行呢,因为你也没有加^$;为什么不加^$就不行呢?不是不行,例如:如果不使用^和$的话,对于\d{5,12}而言,使用这样的方法就只能保证字符串里包含5到12连续位数字,而不是整个字符串就是5到12位数字;所以你的问题和此例相似。解答完毕。

最赞回答 / 氧化氮
?为懒惰模式,匹配尽量少的pattern,不存在匹配多个则失败的情况。

已采纳回答 / 几次撒拉3398055
此处$match[0]是一个数组变量,如果你是在正则表达式那里看到的,则应该是用于储存preg_match函数的结果,默认储存在数组第一位置。
全部 我要发布
最热 最新
只看我的

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

账号登录 验证码登录

遇到问题
忘记密码

代码语言