• 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个元素

  • 相关阅读:
    leetcode 309. Best Time to Buy and Sell Stock with Cooldown
    leetcode 714. Best Time to Buy and Sell Stock with Transaction Fee
    leetcode 32. Longest Valid Parentheses
    leetcode 224. Basic Calculator
    leetcode 540. Single Element in a Sorted Array
    leetcode 109. Convert Sorted List to Binary Search Tree
    leetcode 3. Longest Substring Without Repeating Characters
    leetcode 84. Largest Rectangle in Histogram
    leetcode 338. Counting Bits
    git教程之回到过去,版本对比
  • 原文地址:https://www.cnblogs.com/mumue/p/2831442.html
Copyright © 2020-2023  润新知