PHP面试 PHP基础知识 六(正则表达式)

正则表达式

  正则表达式的作用

    分割、查找、匹配、替换字符串

         分隔符正斜线(/)、hash符号(#)、以及取反符号(~)

    通用原子\d(代表十进制的0-9)、\D (取反除了0-9)、\w(数字、字母、下划线)

                           \W(除了数字字母下划线)、\s(空白符)、\S(除了空白符)

         元字符:  .    *   ?   ^   $   +  {n}   {n,m}   []   ()   [^]    |   [-]

    . 点代表的意思是除了换行符的任意字符

         *   代表匹配前面的内容出现0次或者多次

         ? 代表匹配前面的内容出现0次或者1次

         ^   代表匹配输入字符串的开始位置

   $   代表匹配输入字符串的结尾位置

   +   代表匹配前面的内容出现1次或者多次

   {n} n是一个非负整数,匹配确定的n次

   {n,m}  n和m均为非负整数,最少匹配n次最多匹配m次

   [ ]  定义匹配字符范围

   ()   标记一个子表达式的开始和结束位置

   [^]  取反   除了中括号里面的其他都匹配

   |     或者的意思

   [-]   代表的是一个范围  比如[ 0 - 9 ]

   

     模式修正符i   m   e   s   U   x   A   D   u

      i       不区分大小写

     m     将字符串视为多行,不管是那行都能匹配

     e      配合函数preg_replace()使用    //PHP7.0已经取消

     s      修正点和换行

     U     只匹配最近的一个字符串,不重复匹配     取消贪婪模式

     x      将模式中的空白符忽略

     A      强制从目标字符串开头匹配

     D     使用$限制结尾字符,则不允许结尾有换行

     u      中文匹配

  

  后向引用:

$str = "<p>abc</p>";

$pattern = '/<p>(.*)<\/p>';

//将str字符串替换成不带p标签的
preg_replace( $pattern, '\\1',$str );   

 //反斜线1代表的意思就是第一个括号里面匹配到的内容

  贪婪模式

$str ="<p>abc</p><p>bcd</p>";

$pattern = '/<p>.*?<\/p>/';   // ?可以取消贪婪

preg_replace_all($pattern, '\\1',$str);

$pattern = '/<p>.*<\/p>/U';  //U也可以取消贪婪

  正则表达式PCRE函数preg_match()  preg_match_all()   preg_replace()  preg_split()

  中文匹配UTF-8汉字编码范围是0x4e00-0x9fa5   ANSI(gb2312)环境下 0xb0-0xf7 ,  0xa1-0xfe

  UTF-8要使用u模式修正符使模式字符串被当成UTF-8   ANSI(gb2312)环境下要使用chr将Ascii码转换为字符

  

$str = "中国你好";

$pattern = '/[\x{4e00}-\x{9fa5}]+/u';  //utf-8

$pattern = '/['.chr(0xb0).'-'.chr(0xf7)']['.chr(0xa1).'-'.chr(0xfe)']/';

preg_match($pattern ,$str ,$match);

var_dump($match);

 

posted @ 2019-06-18 19:32  进化史  阅读(449)  评论(0编辑  收藏  举报