// 系统定义好的一些常用集合// \w [a-zA-Z0-9_]// \W \w的补集(即匹配不在\w集合内的字符串)/*$str='tommorw is another day , o2o , you dont bird me i dont bird you';$patt='/\W{1,}/';//匹配字数>=1的不为[a-zA-Z0-9_](\w的补集)的字符串preg_match_all($patt,$str,$matches);var_dump($matches);
//模式修饰符,可以一定程度上影响正则的解析行为//i模式:代表正则不区分大小写,'/[a-zA-Z]+/'-->'/[a-z]+/i'/*$str="hello WORLD ChiNA";$patt='/\b[a-z]+\b/i';preg_match_all($patt,$str,$matches);var_dump($matches);//s模式:单行模式,就代表把整个文件看成一个‘单行’$str='hello WORLD
ChiNA';$patt='/\b.+\b/s';preg_match_all($patt,$str,$matches);var_dump($matches);//u模式:把传入的参数看成是unicode字符集的编码,可以判断中文//php下正则匹配中文,u模式,\x{4e00}-\x{9fa5}$str='三下手机s';//\x{}:代表表示的是unicode编码而不是字符串$patt='/^[\x{4e00}-\x{9fa5}]+$/u';//匹配中文,在unicode表里中文编码从4e00开始到9fa5结束echopreg_match($patt,$str)?'纯中文':'混合';
预查
//把ing结尾的单词词根部分(即不含ing部分)找出来//不用预查自己试了下$str="hello ,when i am working, do not coming";$patt='/\b(\w+)ing\b/';//出来的数组第一个是匹配结果,第二个就是我们要的词根(第一个引用)了;//使用预查(?)//实现原理(基于所在光标):前瞻(往前看) 断言(判断会是什么) 正预测(是什么样,负预测--不是什么) 零宽度(没有消耗字符)$patt='/\b\w+(?=ing\b)/';//判断后面是否是ing结尾的,是则能匹配,第一个\b->单词开头,第二个\b->单词结尾.这样可以直接返回ing前面的单词词根//把不是ing结尾的单词找出来//零宽度 负预测 前瞻 断言$patt='/\b\w+(?!ing)\w{3}\b/';//1.要判断是不是ing结尾至少需要3个字符,所以i am 也不符合规则 //把un开头的单词词根找出来//零宽度 正预测 回顾(返回来看) 断言$str='luck ,unlucky,state , unhappy';$patt='/(?<=\bun)\w+\b/';//<表示往后看,即取un后的词根//把不是un开头的单词找出来//零宽度 负预测 回顾(返回来看) 断言$patt='/\b\w{2}(?<!un)\w+\b/';preg_match_all($patt,$str,$matches);var_dump($matches);