正则表达式基础

xiaoxiao2021-02-28  20

字符边界

^匹配字符串的开始

$匹配字符串的结尾 \b匹配单词的开始和结尾(边界) \B匹配单词的非边界

常用字符簇(就是系统规定好的表示方法) 簇      代表 .()  任意字符,不含换行 \w    [a-z A-Z 0-9_ ] \W    \w 的补集 \s    空白符,包括\n\r\t\v\S    非空白符 \d    [0-9] \D    非数字 字符集合 字符集合[ace],[01235689] 字符补集[^ qxz ]:不在qxz范围内 匹配数次 *匹配前面的子表达式零次或多次。 + 匹配前面的子表达式一次或多次。 \? 匹配前面的子表达式零次或一次。 {n} n 是一个非负整数。匹配确定的n 次 {n,m} m 和n 均为非负整数,其中n <= m 最少匹配 n 次且最多匹配 m 次。。 {n,} n 是一个非负整数。至少匹配n 次。 匹配单词 <?php // 把字符串的单词mi找出来 // \b \b 匹配单词的开始和结尾(边界) $str = 'mi miss whomiwho hmim mistry'; $patt = '/\bmi\b/'; preg_match_all($patt, $str,$res); print_r($res); //输出Array ( [0] => Array ( [0] => mi ) ) ?> <?php //把单词内部的mi找出来 $str = 'mi miss whomiwho hmim mistry'; $patt = '/\Bmi\B/'; preg_match_all($patt, $str,$res); print_r($res); //Array ( [0] => Array ( [0] => mi [1] => mi ) ) ?> 集合与补集示例 <?php /*找出不包含4,7的11位号码*/ $patt = '/^[01235689]{11}$/'; //$patt = '/^[^47]{11}$/'; //补集方式 等价于^[01235689]{11}$ $arr = array('13825593939','1342770134','1730235','1864562321323'); foreach($arr as $v) { preg_match_all($patt, $v, $res); print_r($res); //输出Array ( [0] => Array ( [0] => 13825593939 ) ) Array ( [0] => Array ( ) ) Array ( [0] => Array ( ) ) Array ( [0] => Array ( ) ) } ?> 字符范围 <?php //找出纯字母组成的单词 $str = 'o2o, b2b, bye,good, yes'; $patt = '/\b[a-zA-Z]+\b/'; preg_match_all($patt, $str, $res); print_r($res);//输出Array ( [0] => Array ( [0] => bye [1] => good [2] => yes ) ) ?> 字符簇示例 <?php //把单词拆开 $str = 'tommorw is a good day , i will ride my bike travell'; $patt = '/\W{1,}/'; // \W \w[a-zA-Z0-9]的补集 print_r(preg_split($patt, $str));//preg_split通过正则分割字符串 //输出Array ( [0] => tommorw [1] => is [2] => a [3] => good [4] => day [5] => i [6] => will [7] => ride [8] => my [9] => bike [10] => travell ) ?> <?php //把空白符,包括 \n\r\t\v 等换成一个空格 $str = 'a b heloo world'; $patt = '/\s{1,}/'; // \s 空白符,包括 \n\r\t\v等 //preg_replace 执行一个正则表达式的搜索和替换 echo $str; //输出a b heloo world echo preg_replace($patt, ' ', $str); //输出a b heloo world ?> 匹配数次示例 <?php // 5个字母组成的单词 //$patt = '/[a-zA-Z]{5}/'; //3-5个字母组成的单词 //$patt = '/[a-zA-Z]{3,5}/'; //5个字母以上组成的单词 //$patt = '/[a-zA-Z]{5,}/'; $s = 'goooood,goood,goooooooooood'; //把以上单词替换成god $p = '/go+d/'; //+:1个或多个o print_r(preg_replace($p,'god',$s)); //输出god,god,god ?> 或者的用法 <?php //找出纯数字或者纯字母 $str = "yesterday 222 we are 666 fun"; $patt= '/\b[a-zA-Z]+\b|\b\d+\b/';//或者的符号 | d\等于[0-9] preg_match_all($patt, $str,$res); print_r($res); //输出Array ( [0] => Array ( [0] => yesterday [1] => 222 [2] => we [3] => are [4] => 666 [5] => fun ) ) ?> 贪婪模式与非贪婪模式 <?php //匹配g(任意多的内容)d $str = 'hello world good goooods ok you it is dog'; $patt = '/g.+d/'; // .表示任意字符 默认贪婪模式(会尽量多的去匹配) preg_match_all($patt, $str, $res); print_r($res); //输出Array ( [0] => Array ( [0] => good goooods ok you it is d ) ) ?> <?php //匹配g(尽量少的内容)d $str = 'hello world good goooods ok you it is dog'; $patt = '/g.+?d/'; // 非贪婪模式 在数量(+ *{n,})限定符后加? preg_match_all($patt, $str, $res); print_r($res); //输出Array ( [0] => Array ( [0] => good [1] => gooood ) ) ?> 从字符串采集手机号 <?php //采集字符串里的手机号 $str = "我的手机号码是18234576899 什么21713422789001 备用号码13800138000"; $patt = '/\b1[3458]\d{9}\b/'; preg_match_all($patt, $str, $res); print_r($res);//Array ( [0] => Array ( [0] => 18234576899 [1] => 13800138000 ) ) ?> 后向引用 <?php //找出下列首尾字母相同的单词 $str = "num mum yes loll what txt"; $patt = '/\b([a-z])\w+\1\b/'; //第n个小括号内的子表达式,后面就有\n来引用 preg_match_all($patt, $str, $res); print_r($res); //输出Array ( [0] => Array ( [0] => mum [1] => loll [2] => txt ) [1] => Array ( [0] => m [1] => l [2] => t ) ) ?> <?php //后向引用替换 $str = "13800138000 18219333331"; $patt = '/(\d{3})\d{4}(\d{3})/'; //替换中间四位为**** print_r(preg_replace($patt,'\1****\2', $str)); //输出138****8000 182****3331 ?> 模式的用法 模式修饰符,可以一定程度上影响正则的解析行为 比如i,就代表正则不区分大小写, /[a-z A-Z ]+/ --->/[a-z ]+/i 比如s,单行模式,就代表把整个文件看成一个"单行" <?php $str = 'hello WHAT Where Are YOU'; //$patt = '/\b[a-z]+\b/'; //hello $patt = '/\b[a-z]+\b/i'; //忽略大小写 preg_match_all($patt, $str, $res); print_r($res); //Array ( [0] => Array ( [0] => hello [1] => WHAT [2] => Where [3] => Are [4] => YOU ) ) ?> u模式,把传入的参数看成是unicode字符集的编码,可以判断中文 PHP模式下匹配中文,u模式 \x{4e00}-\x{9fa5} <?php $str = 'wxu吴'; $patt = '/^[\x{4e00}-\x{9fa5}]+$/u'; echo preg_match($patt, $str) ? '纯中文' : 'no'; //no ?>

转载请注明原文地址: https://www.6miu.com/read-800160.html

最新回复(0)