正则表达式

一:语法基础

完整的正则表达式由两种字符组成 特殊字符(元字符)和普通字符(文本)
示例:
/^\d+hello.*/
\d + . * 都是元字符
hello是普通字符

二:元字符

1.元字符列表

. 除了换行以外的任意字符
[abcde] 匹配abcde里面的任意字符
[^abcde] 不匹配abcde里面的任意字符
[a-h] 匹配a-h的任意字符
\w相当于[a-zA-Z0-9_]
\W相当于[^a-zA-Z0-9_]
\s匹配任何空白字符[ \f\n\r\t\v]
\S匹配任意非空白字符[^\s]
\d匹配数字
\D不匹配数字
[\u4e00-\u9fa5]匹配任意汉字(这里用unicode编码表示汉字)

2.元字符-限定字符

*匹配0-多个字符
?匹配0-1个元字符
{0,}0-多个元素
{0,1}0-1个字符
{n}匹配n个字符
{n,}匹配至少N个字符
+至少匹配一个
\b匹配单词边界
^匹配行首
$匹配行尾

3.说明:

1)特殊字符转义:\,?,",比如至少一个\,正则表达式匹配应为\\+
2)可以将元字符或普通字符括起来作为分组

如何判定哪些是元字符?
元字符转义测试

三:进阶

1.多选结构,正则的多种写法

2.分组和后项引用

3.环视(零宽断言),

不匹配任何字符,只匹配特定的位置,类似于\b,^,$。环视不会占用字符
环视分为顺序和逆序两种
顺序(?=exp)位置的后面能匹配exp,(?!exp)位置的后面能不匹配exp
逆序(?<=exp)位置的前面能匹配的exp,例如(?<=\d)当前位置的左边是数字
(?<!exp)位置的前面不能匹配的exp,例如(?<!\d)当前位置的左边不能匹配数字

4.贪婪和非贪婪(匹配优先与忽略优先)

<?php
$string = 'aaabaab';
$pattern1 = '/a.{1,10}b/';
$pattern2 = '/a.{1,10}?b/';
preg_match_all($pattern1,$string,$arr1);
preg_match_all($pattern2,$string,$arr2);
var_dump($arr1);
var_dump($arr2);

四:高级

1.正则引擎的了解
2.回溯
3.表达式的优化
1)化简量词
2)尽量不使用分组
3)尽量不使用或a|b|c不如[abc]的效率
4)回溯的越少,速度越快

五:PHP与正则表达式

1.PHP常用的模式修饰符

1)i 大小写不敏感
2)m 增强的行锚点模式
3)x 空白和#注释将被忽略
4)s 点号元字符匹配所有字符,包含换行符
5)e 将替换后的字符串作为PHP 代码评估执行

2.PHP中的正则使用

PHP中的pcre库和posix库的对比
pcre的正则分隔符可以是任意的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值