【正则入门】

语法

. (点) 匹配除换行符(\n、\r)之外的任何单个字符,相等于 [^\n\r]。
[\s\S] 匹配所有。\s 是匹配所有空白符,包括换行,\S 非空白符,不包括换行。
\d [0-9]
\D 非数字;
\w 匹配字母、数字、下划线。等价于 [A-Za-z0-9_];
\W 匹配\w的补集;

在这里插入图片描述

字符范围

$str = 'baidu o2o c2c xiling shuai 123 chou bage ';
//$patt= '/\b[a-zA-Z]+\b/';//加号表示多个不限;
$patt= '/\b[a-zA-Z]{5,}\b/';//最少有5个;
preg_match_all($patt,$str,$arr);
var_dump($arr);

结果:
在这里插入图片描述

找几个

  • *( 匹配前面的子表达式零次或多次);
  • +匹配前面的子表达式一次或多次;
  • ?匹配前面的子表达式零次或一次;
  • {n}n是一个非负整数。匹配确定的n次;
  • {n,m}m和n均为非负整数,其中n<=m,最少匹配n次,最多匹配m次;
  • {n,}n是一个非负整数。至少匹配n次;
$str='god goood   gooooooood';
$patt='/go+d/';
echo preg_replace($patt,'god',$str);

在这里插入图片描述

或者的 用法 |

$str = '211 hello 0210oo dkj44';
$patt = '/\b[a-zA-Z]+\b|\b\d+\b/';
preg_match_all($patt,$str,$res);
var_dump($res);

在这里插入图片描述

贪婪与非贪婪(正则默认是贪婪模式,在数量(+ * {n,})限定符后加?,非贪婪模式)

$str = 'ipad,iphone,imac,ipod,iamsorry,goood, god goooooooood jkl ljklkjklj';
//$patt = '/\bg.+d\b/';//贪婪模式  一直往后找
$patt = '/\bg.+?d\b/';//非贪婪模式  找到一个算一个
preg_match_all($patt,$str,$res);
var_dump($res);

贪婪模式结果

在这里插入图片描述

非贪婪模式结果

在这里插入图片描述

采集手机号

$str = '老王 买西瓜 联系15069091069,备用 电话 19935198152 QQ :1097848288,email 1097848289@qq.com,
xiguoahao 4576541244515069891526';
$patt = '/\b1[35879]\d{9}\b/';

preg_match_all($patt,$str,$res);
var_dump($res);

在这里插入图片描述

后向引用(第n个小括号内得子表达式,命中得内容,后面就佣\n来引用)


//找出首尾字母相同得单词
$str = 'txt hidffd hfihui jlkjlkj iuj hello bom mum';

$patt = '/\b([a-z])\w+\1\b/';

preg_match_all($patt,$str,$res);

var_dump($res);

在这里插入图片描述

//把手机号中间四位换成*
$str = '15069106959 19935198152';
$patt = '/\b(\d{3})\d{4}(\d{4})\b/';
//preg_match_all($patt,$str,$res);
$res=preg_replace($patt,'\1****\2',$str);
var_dump($res);

在这里插入图片描述

模式

模式修饰符,可以在一定程度上影响正则得解析行为
比如i,就代表正则不区分大小写,/[a-zA-Z]+/----->/[a-z]+/i
比如s,单行模式,就代表把整个文件看成一个“单行”
比如u 匹配中文

$str = 'hello world Chlha worLD';

//$patt = '/\b[a-z]+\b/'; //只匹配小写字母单词
$patt = '/\b[a-z]+\b/i';  //不区分大小写

preg_match_all($patt,$str,$res);

var_dump($res);

在这里插入图片描述
在这里插入图片描述

验证是否纯中文

$str = '时';

$patt = '/^[\x{4e00}-\x{9fa5}]$/u';//    \x   按ASCII码查,大括号中是对应的码

echo preg_match_all($patt,$str)?'chun':'zha';

预查

//取ing结尾得单词得词根
$str = 'hello  working  coming test wehn i am';

//前瞻   断言  正预测   零宽度
$patt = '/\b\w+(?=ing\b)/';//?=ing   后面是ing

preg_match_all($patt,$str,$res);

var_dump($res);

在这里插入图片描述

$str = 'hello  unworking  coming untest wehn i unam';

//零宽度   回顾    断言    正预测
$patt = '/(?<=\bun)\w+\b/';//    <   往前看      正预测   是否 ,,, 是  

preg_match_all($patt,$str,$res);

var_dump($res);

在这里插入图片描述

$str = 'hello  unworking  coming test wehn i am abc';

//前瞻   断言  负预测   零宽度
$patt = '/\b\w+(?!ing)\w{3}\b/';//满足3个且后三还不是ing得  单词长度大于3

preg_match_all($patt,$str,$res);

var_dump($res);

在这里插入图片描述

$str = 'hello  unworking  coming test wehn i am abc';

//找出不是un开头的单词
//回顾   断言  负预测   零宽度
$patt = '/\b\w{2}(?<!un)\w+\b/';

preg_match_all($patt,$str,$res);

var_dump($res);

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值