批改状态:合格
老师批语:正则并不难学, 只要理解了几个重要的概念, 还有它的作用之后就好了
<?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---点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号