什么是正则表达式?是一款功能强大的字符串处理(搜索匹配、搜索替换、搜索切分)工具。这是一个规则。正则表达式应用范围数据验证数据处理/过滤数据查询语言(js/php/java/c#)支持正则表达式PHP相关函数preg_filter(mixed$pattern,mixed$replacement,mixed$subject[,int$limit=-1[,int&$count]])preg_match(string$pattern,string$subject[,array&$matches[,int$flags=0[,int$offset=0]]])//正则表达式匹配,返回匹配结果个数preg_match_all(string$pattern,string$subject[,array&$matches[,int$flags=PREG_PATTERN_ORDER[,int$offset=0]]])//执行一次全局正则表达式匹配,返回匹配结果个数preg_replace(mixed$pattern,mixed$replacement,mixed$subject[,int$limit=-1[,int&$count]])//进行正则表达式搜索并替换preg_replace_callback(mixed$pattern,callable$callback,mixed$subject[,int$limit=-1[,int&$count]])//执行正则表达式搜索并用回调pre替换g_split(string$pattern,string$subject[,int$limit=-1[,int$flags=0]])//用正则表达式分隔字符串preg_quote(string$str[,string$delimiter=NULL])//转义正则表达式字符preg_grep(string$pattern,array$input[,int$flags=0])//返回给定数组输入中与模式pattern匹配的元素数组。正则表达式分隔符一般使用'/',但不限于此,字母、数字、反斜杠'\'以外的字符都可以作为分隔符原子。匹配除换行符外的任何字符\d匹配任何十进制数\D匹配任何非十进制数\s匹配一个不可见的原子\S匹配一个可见的原子\w匹配任何数字、字母或下划线[a-zA-Z0-9_]\W匹配任何数字、字母或下划线[^a-zA-Z0-9_][]作为原子,匹配[]之间的原子[^]作为原子,不能匹配[]元字符之间的原子//量词{n}匹配原子恰好n次{n,}匹配原子出现不少于n次{n,m}匹配原子至少出现n次,最多m次*等价于{0,}+等价于{1,}?等价于{0,1}//边界限制^指定匹配字符串以什么原子开头$指定匹配的字符串以什么原子结尾//patternselector|多选一//patternunit()多原子作为大原子模式修饰符i//不区分大小写s//在正则表达式中。匹配所有字符,包括换行符U//匹配模式变为惰性模式(只有PHP有,其他语言不兼容,请用.*?)x//匹配时空白忽略preg_filter和preg_replace的区别当目标数据为数组,preg_filter只返回匹配的数组元素,preg_replace返回所有数组元素正则表达式示例非空判断$pattern='/\\S+/';$ret=preg_match($pattern,'');/$str='2年后你是谁';$pattern='/\\s+/';$ret=preg_replace($pattern,'',$str);手机号匹配$pattern='/^1(3[0-9]|4[57]|5[0-35-9]|7[0135678]|8[0-9])\\d{8}$/';//匹配移动$pattern='^1(3[4-9]|4[7]|5[0-27-9]|7[08]|8[2-478])\\d{8}$';//匹配联通$pattern='^1(3[0-2]|4[5]|5[56]|7[0156]|8[56])\\d{8}$';//匹配电信$pattern='^1(3[3]|4[9]|53|7[037]|8[019])\\d{8}$';电子邮件匹配$pattern='/^(\w)+(\.\w+)*@(\w)+(\.\w+)+$/';URL验证(http/https)$pattern='/^https?\:////(\w+\.)+[a-z]+$/';正则表达式使用场景——模板引擎实现原理1.获取模板源文件2.编译模板输出到文件(替换为正则,文件会保存编译好的模板代码html+php)3.执行编译好的模板模板文件(会得到html,如果要静态化,就是这一步)4.输出模板的简单实现Step1.创建2个文件夹(一个存放模板源文件,一个存放模板编译文件)2.读取模板源文件$outputHtml=file_put_contents($filePath);3.使用正则模式进行模式替换,然后使用一个新文件存储正则模式进行模式替换$str='test:{{$test}}';$pattern='/\{\{*\$(\w+)*\}\}/';$arr=preg_replace($pattern,'',$str);//final$arr="test:"//除了\\1,还可以用$1//获取需要动态执行的字符串,可以用eval(),否则不会执行,但是eval()不能有php的start/close标签
