• PHP从入门到精通——读书笔记(第6章:正则表达式)


    第六章:正则表达式

    1:行定位符( ^ 和 $ )—— 表示行得开始和结尾

    2:单词定界符(\b、\B)—— 如:使用tm可以匹配在字符串中出现的任何位置,那么类型html、utmost中的tm也会被查找出来。但现在需要匹配的单词是tm,而不是单词的一部分。此时可以使用单词分界符 \b,表示要操作的字串为一个完整的单词。如:
    \btm\b
    还有一个大写的\B,意思和\b 相反。它匹配的字串不能是一个完整的单词,而是其他单词或字串的一部分:\Btm\B

    3:字符类([])—— 正则表达式是区分大小写的,如要忽略大小写可以使用方括号表达式“[]”。只要匹配的字符出现在方括号内,即可表示匹配成功。注意:一个方括号只能匹配一个字符

    4:选择字符(|)—— 该字符理解成“或”。使用[]和使用 | 的区别在于前者只能匹配单个字符。

    5:连字符(-)—— [a,b,c,d.....A,B,C,D...] => [a-zA-Z]

    6:排除字符([^])

    7:限定符(?、 *、 +、 {n,m})

    8:点字符(.)—— 匹配除换行符外任何一个字符

    9:转义字符(\)—— [0-9]{1,3}(\.[0-9]{1,3}){3}

    10:反斜线(\)



    11:括号字符( () )—— a:改变限定符的作用范围: (thir|four)th  b:分组

    12:反向引用——依靠子表达式的“记忆”功能来匹配连续出现的字串字母。如匹配连续两个it,首先将单词it作为分组,然后再后面加上“\1”即可: (it)\1

    这是反向引用最简单的格式。如果要匹配的字串不固定,那么就将括号内的字串写成一个正则表达式。如果使用了分组,可以用“\1”、“\2” 来表示每个分组(顺序是从左到右)。如:
    ([a-z])([A-Z])\1\2
    除了可以使用数字来表示分组,还可以自己指定分组名称:
    (?P<subname>...)
    如果要反向引用该分组,使用如下语法:
    (?P=subname)

    13:模式修饰符—— 作用:设定模式。也就是规定正则表达式应该如何解释和应用。PHP中的主要模式如下:

    POSIX 扩展正则表达式函数——php中实现POSIX正则表达式的函数有7个


    1:ereg() 函数和 eregi() 函数
    语法: bool ereg/eregi (string pattern, string string [,array regs]);
    功能:在字符串string中匹配表达式pattern,成功返回true,否则false。如果有第三个参数regs,则将成功匹配的字串按子串(子表达式)划分,并储存到regs数组中。 ereg区分大小写, eregi不区分。

    使用ereg()函数验证变量是否合法:
    $ereg = '^[$][[:alpha:]__][[:alnum:]]*';
    $ereg($ereg, '$_name', $register); //使用ereg()函数匹配变量名
    var_dump($register);

    2:ereg_replace() 函数和 eregi_replace() 函数
    语法: string ereg_replace/eregi_replace ( string pattern, string replacement, string string);
    功能:在字符串string中匹配表达式pattern,如果成功,则使用replacement来替换匹配字串,并返回替换后的string。

    3:split()函数 和 spliti() 函数—— 使用表达式pattern 来分割字符串string 
    array split/spliti (string pattern, string string [,int limit]);

    PCRE兼容正则表达式函数——实现PCRE风格的正则表达式的函数也有7个。PCRE函数效率优于POSIX函数

    1:preg_grep() 函数
    语法:array preg_grep (string pattern, array input)
    功能:使用数组input中的元素一一匹配表达式pattern,最后返回所有相匹配的元素所组成的数组
    $preg = '/\d{3,4}-?\d{7,8}/'; //国内电话格式表达式
    $arr = array('043212345678','0431-7654321','12345678') // 包含元素的数组
    $preg_arr = preg_grep($preg, $arr);
    var_dump($preg_arr);

    2:preg_match()函数和preg_match_all() 函数
    语法:int preg_match/preg_match_all (string pattern, string subject [,array matches]);
    功能:在字符串subject中匹配表达式pattern,函数返回匹配的次数。如果有数组matches,那么每次匹配的结果都将被储存到数组matches中。
    preg_match() 的返回值是0或1,因为匹配成功后就停止继续查找了。而preg_match_all() 则会一直匹配直到最后

    3:preg_quote() 函数
    语法:string preg_quote (string str [,string delimiter]);
    功能:该函数将字符串str中的所有特殊字符进行自动转义,如果有参数delimiter,则该参数所包含的字串也将被转义。函数返回转义后的字串。
    注意:这里的特殊字符是指正则表达式中具有一定意义的元字符。其他如“@”、“#”等则不会被当做特殊字符处理

    4:preg_replace() 函数
    语法:mixed preg_replace( mixed pattern, mixed replacement, mixed subject [, int limit]);
    功能:该函数在字符串subject中匹配表达式pattern,并将匹配项替换成字串replacement。如果有limit,则替换limit次。
    注意:如果参数中调用的是数组,有可能在调用过程中并不是按照数组的key值进行替换,所以在调用之前需要将数组重新排列ksort()

    $string = '[b]粗体字[/b]';
    $b_rst = preg_replace('/\[b\](.*)\[\/b\]/i', '<b>$1</b>', $string);
    echo $b_rst;
    说明:preg_replace() 函数中的字串“$1” 是在正则表达式外调用分组,按照$1、$2排列,依次表示从左到右的分组顺序,也就是括号顺序。 $0 表示的是整个正则表达式的匹配值。参考 反向引用。

    5:preg_replace_callback() 函数
    语法: mixed preg_replace_callback() 函数与 preg_replace() 函数的功能相同,都用于查找和替换字串。不同的是它使用一个回调函数来代替replacement参数

    6:preg_split() 函数
    语法: array preg_split( string pattern, string subject [, int limit])
    功能:使用表达式pattern来分割字符串subject。如果有参数limit,那么数组最多有limit个元素

  • 相关阅读:
    1583: [Usaco2009 Mar]Moon Mooing 哞哞叫
    1734: [Usaco2005 feb]Aggressive cows 愤怒的牛
    1596: [Usaco2008 Jan]电话网络
    1589: [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果
    机器学习笔记(2)单变量线性回归
    P4编程环境搭建遇到的问题与解决方法
    P4编程环境搭建
    机器学习笔记(1)监督学习和无监督学习
    阅读 用P4对数据平面进行编程
    Mininet实验 MAC地址学习分析
  • 原文地址:https://www.cnblogs.com/mumue/p/2831442.html
Copyright © 2020-2023  润新知