正则表达式

正则表达式:是用于描述字符排列模式的一种语法规则。

应用范围:

表单验证,数据替换,字符串的分割、匹配、查找及替换等。

PHP中有两种形式的正则表达式:

一种是由“POSIX”扩展库提供的,另一种是“PCRE”(Perl)库提供的。语法不同,但是功能完全一样。

PCRE库的正则表达式,这种形式更加强大,效率略占优势

所以的语言,都支持正则表达式

主要应用场景及相关函数

  • 验证数据

    相关函数:preg_match( z z , zz, zz,str);

    • 字符匹配

      ereg() //POSIX样式

      preg_match(); //Perl样式

      1.如果是匹配,返回1,也就是true,否则返回0,也就是false

      2.preg_match()是ereg()的代替方案,preg_match()速度更快

  • 替换数据

    preg_replace(“正则表达式”,替换为,替换位置,替换次数)

    列:echo preg_replace("/[2563]/","*", s t r ) / / 将 str) //将 str)//str中的2563全部替换为*

  • 正则分割函数

    preg_split("/正则表达式/",分割字符串)

  • 匹配数据

    获得匹配规则的数据

    preg_match_all("/zz/",)

正则表达式构成

  • 原子(普通字符)

    个人字符,数字

  • 元字符(特殊字符)

正则表达式的规则写法

  • $zz="/正则表达式/"

    z z = " / 正 则 表 达 式 zz="/^正则表达式 zz="//"

    ^或/A 字符串首匹配

    $或/z 字符串尾匹配

手机号验证

  • 思路:11位,全数字,1开头
$zz="/^1[0-9]{10}$/"
  • []表示选取范围内的一个原子

    {m}表示其前恰好出现m次

    {m,n}表示其前原子至少出现m次,最多出现n次(n>m)

    {m,}表示其前原子出现不少于m次

  • $phone=“电话号码”

    验证过程

    <?php
    	$phone="12345678911";
    	$zz="/^1[0-9]{10}$/"; //提高严谨性
    	$a=preg_match($zz,$phone);
    	var_dump($a); //int(1)
    ?>
    

邮箱验证

  • 思路分析:邮箱由字母数字@.组成

    1.一定包含@.

    2.格式为:xxx@yy.zzz

    ​ xxx与yy都是数字与字母的组合

    ​ zzz对应邮箱平台方的域名后缀,一般为字母,至少两位,最多四位

  • \w:匹配一个英文字母、数字或下划线:等价于[0-9a-zA-Z]

  • \W:匹配除英文字母、数字或下划线以外任何一个字符,等价于[^0-9a-zA-Z]

  • +:匹配1次或多次匹配其前的原子

  • *:0次、1次或多次匹配其前的原子

  • ?:0次或1次匹配其前的原子

  • .:匹配任何一个字符

<?php
	$str="redbud@163.com";
	$zz="/^\w+@\w+.\w{2,}$/";
	$check=preg_match($zz,$str);
	if($check){
	echo "邮箱正确";
	}
	else{
	echo "邮箱错误";}
?>   //返回为邮箱正确

网址链接验证

  • 验证网址链接必须有http://或者https://

    <?php
    	$str="https://www.redbud.com";
    	$zz="/^https?:\/\/\w+\.+/w+/";
    	$check="preg_match($zz,$str)";
    	if($check)
    	echo "网站正确";
    	else
    	echo "网站错误";
    ?> //返回值为网站正确
    
    • ():元子符"()"将其中的正则表达式变为原子(或模式单元)使用。
    • |:表示为或者关系
  • 验证网址链接

    <?php
    	$str="https://www.redbud.com";
    	$zz="/^(https)|(http)?:\/\/\w+\.+/w+/";
    	$check="preg_match($zz,$str)";
    	if($check)
    	echo "网站正确";
    	else
    	echo "网站错误";
    ?> //返回值为网站正确
    

验证真实姓名必须为汉字

  • 验证姓名必须为两个汉字以上

    <?php
    	$str="某某某";
    	$zz="/^[^u4E00-u9FA5]{4,10}/";  //固定写法,汉字为两个字节,至多五个汉字
    	$check=preg_match($zz,$str);
    	if($check)
    	echo "姓名正确";
    	else
    	echo "姓名错误";
    ?> //返回值为姓名正确
    

保密或隐藏客户手机号

  • 网站中显示手机号,隐藏部分数字
<?php
	$str=12536895581;
	$zz=preg_replace("/[68]/","*",$str);
	echo "$zz";
?> //返回值为1253**955*1
<?php
	$str=12536895581;
	$zz=preg_replace("/[68]/","*",$str,1);
	echo "$zz";
?> //返回值为1253*6895581

字符串分割成数组

  • 将字符串分割为需要的数组,代替explode不能完成的分割操作

    <?php
    	$str="张山#李四#王五,小李";
    	$arr=explode("#",$str);
    	print_r($arr);
    ?>  //输出为0=>张三 1=>李四 2=>王五,小李
    
<?php
	$str="张山#李四#王五,小李";
	$arr=preg_split("/[#,]/",$str);
	print_r($arr);
?>  //输出为0=>张三 1=>李四 2=>王五 3=>小李

匹配数据

  • 数据采集流程上

    1.获取信息,比如:用file_get_contents($url)

    2.对有效数据信息进行截取处理preg_match_all

    <?php
    	$str="网路抓包数据";
    	$zz="正则表达式";
    	preg_match_all($zz,$str,$arr);
    	print_r($arr);
    ?> //将zz中的数据通过str的正则表达式规则进行数据匹配,得到想要的数据,保存至$arr中
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值