登录  /  注册
博主信息
博文 40
粉丝 0
评论 0
访问量 36549
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
PHP学习总结(20)正则实例——2019年10月17号20:00分
虎子爸爸
原创
725人浏览过


正则函数实例

<?php

$content = "现任***总统唐纳德·***给95岁的前总统吉米·卡特
打了一个电话,***在电话中说,“中国正在超越***”,这令他感到不安。
卡特表示,***在战争上花费了3万亿美元,
而中国这些年来从未向任何国家发动战争,同时大力兴建基础设施。
从这番通话可以看出,面对中国的崛起,***是焦虑的。";

$pattem = "/***/";
function res_check($res){
	echo "<br>搜索结果--";
	foreach($res as $value){
	if(is_array($value)){
		foreach($value as $data){
			echo "--".$data."---";
		}
	}else{
		echo "-".$value."--";;
	}
	echo "<br>";
	
}
}
//注意这里/***/和/(***)/不一样。带了括号就表示匹配美或者国都可以,不带括号就只匹配***
/*----------preg_match($pattem,$content,$matches)----------------*/
//1、搜索到第一个就结束
$res = preg_match($pattem,$content,$matches);
var_dump($res);//结果为---int(1) array(1) { [0]=> string(6) "***" }
echo "<br>";
var_dump($matches);//结果为---array(1) { [0]=> array(4) { [0]=> string(6) "***" [1]=> string(6) "***" [2]=> string(6) "***" [3]=> string(6) "***" } } 

res_check($matches);

//2、在目标全部内容中把所有的符合内容都找出来
$res_b = preg_match_all($pattem,$content,$matches_b);
echo "<br>";
var_dump($res_b);
/*
结果为:

*/
echo "<br>";
var_dump($matches_b);
res_check($matches_b);
/*
3、查找并替换,然后返回一个替换后的新字符串,原来的字符串不变。
同时最后的参数,默认为-1,表示替换全部,如果是1,就只替换第一个。
*/
$replacement = "美帝国主义";
$res_c = preg_replace($pattem,$replacement,$content);
echo "<br>preg_replace";
var_dump($res_c);
echo "<br>";
echo $content;
//4、preg_filter感觉和上面的一致
$res_d = preg_filter($pattem,$replacement,$content);
echo "<br>preg_filter:";
var_dump($res_d);
echo "<br>";
echo $content;
echo "<br>";
//5、转义正则表达式
$name = "xinhuluxiaoxue";
$subject = "^time$name=xiaohu!\xiaomao&[]";
$res_e = preg_quote($subject);
var_dump($res_e);//结果为---string(44) "\^timexinhuluxiaoxue\=xiaohu\!\\xiaomao&\[\]" 
echo "<br>";
//6、返回匹配模式的数组条目
$pattem_f = '/^(\d+)?\.\d+$/';
//$pattem_f = '/90/';
$subject_array = array(1,2,3.6,8,90,40.45,48,90);
$res_f = preg_grep($pattem_f,$subject_array);
var_dump($res_f);
res_check($res_f);//结果为3.6---40.45
//7、正则分割字符串
//$pattem_g = '/[\s,]+/';
$pattem_g = '/s/';
$subject_g = "this is a nose";
$res_g = preg_split($pattem_g,$subject_g);
var_dump($res_g);
res_check($res_g);
echo $subject_g;


?>

运行实例 »

点击 "运行实例" 按钮查看在线实例



正则表达式实例

<?php
$subject = "81112222333445556667788\x0c99000adaba+dc-cdde2effg4ghhiigkkakmllaopqirstuvwsxvzABCDEFGHIGKLMNOPQRSTUVWX这是小猫先生这是小狗***这是小猪老师1222@qq.com 2323@163.com 13393729583http://www.123.com";
function res_check($pattem){	
	$subject = "81112222333445556667788\x0c99000ada+badcc2ddeeff4gghhiigk-kakm6llaopqirstuvwsxvzABADBADDDBBBDDDAAACDEFGHIGKLMNOPQRSTUVWX这是小猫先生这是小狗***这是小猪老师1222@qq.com 2323@163.com 13393729583http://www.123.com2";
	$res = preg_match_all($pattem,$subject,$matches);
	$sub_length = strlen($subject);
	echo "<br>原字符串的长度".$sub_length."搜索结果:";
	if(is_array($res)){
		foreach($res as $value){
			if(is_array($value)){
				foreach($value as $data){
					echo "--".$data."---";
				}
			}else{
				echo "-".$value."--";;
			}
			echo "<br>";
		}
	}else{
		echo "<br>结果为--".$res;
	}
	echo "<br>结果为---";
	if(is_array($matches)){
		foreach($matches as $value){
			if(is_array($value)){
				foreach($value as $data){
					echo "--".$data."---";
				}
			}else{
				echo "-".$value."--";;
			}
			echo "<br>";
		}
	}else{
		echo "<br>结果为--".$matches;
	}
	echo "<br>";
}

echo $subject;
//1.原子--普通字符--匹配一个a
$pattem_a = '/a/';
res_check($pattem_a);//5  --a--a--a--a--a--
//2.原子--普通字符--匹配a-z之间的任意一个小写字母
$pattem_b = '/[a-zA-Z]/';
res_check($pattem_b);//85 --a--d--a--b--a--...


//3.原子--非打印字符--
$pattem_c = '/\r/';
res_check($pattem_c);//0
//4.元字符--.---找到前面是ab的任意字符

$pattem_d = '/ab./';
res_check($pattem_d);//结果为---aba---

//4.元字符--12|ab  找到12或者ab并返回
$pattem_e = '/12|ab/';
res_check($pattem_e);//结果为--12--ab--12--12


//5.[^9]返回除了9以外的其他当字符
$pattem_f = '/[^9]/';//197,除了ab,把其他字符都返回了
res_check($pattem_f);


$pattem_g = '/[^0-9a-zA-Z]/';
res_check($pattem_g);

//6.^[0-9]找到以任意一个数字开头的字符,并返回这个字符

$pattem_h = '/^[0-9]/';
res_check($pattem_h);//9

//9.[0-9]$找到以任意一个数字结尾的字符,并返回这个字符
$pattem_k = '/[0-9]$/';
res_check($pattem_k);//---2

//7.[0-9]{3}找到3个任意数字相连的字符并取出来
$pattem_i = '/[0-9]{3}/';
res_check($pattem_i);//--111--222--233--344


//8.[0-9]{3,}找到最少3个任意数字相连的字符并取出来
$pattem_j = '/[0-9]{3,}/';
res_check($pattem_j);//

//10.[0-9]{1,3}找到任意3个数字相连的字符,如果找不到,就找任意1个数字的字符
$pattem_l = '/[0-9]{1,3}/';
res_check($pattem_l);//
$pattem_l = '/[a-z]{1,3}/';
res_check($pattem_l);//
//11.[a-z]*找到任意一个小写字母连续出现0次,1次,多次

$pattem_m = '/[a-z]*/';
res_check($pattem_m);//
//12.[a-z]+找到任意一个小写字母连续出现1次或多次的纯字母字符串
$pattem_n = '/[a-z]+/';
res_check($pattem_n);
//13.[a-z]?找到任意一个小写字母连续出现0次或1次的字母
$pattem_p = '/[a-z]?/';
res_check($pattem_p);
//14.预定义字符---\d--相当于[0-9]找到任意一个数字就返回这个数字,搜索全部
$pattem_aa = '/\d/';
res_check($pattem_aa);
//15.预定义字符---\D  --相当于[^0-9],找到任意一个不是数字的字符就返回这个字符,搜索全部
$pattem_ab = '/\D/';
res_check($pattem_ab);
//16、特殊字符,比如+-*?.\^$[])(这些已经在正则中有特殊意思的字符,必须在前面加一个\,表示字符转义
$pattem_ac = '/\+/';
res_check($pattem_ac);
//17.分组符---匹配ad或ba,或者0-9之间的任意一个数字
$pattem_ad = '/(ad|ba)|([0-9])/';
res_check($pattem_ad);
//18.修正符---i--匹配ad或ba,不区分大小写
$pattem_ae = '/ad|ba/i';
res_check($pattem_ae);//ad-----ba-----BA-----BA---

运行实例 »

点击 "运行实例" 按钮查看在线实例


批改状态:合格

老师批语:正则并不难学, 只要理解了几个重要的概念, 还有它的作用之后就好了
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学