正则表达式练习:
<?php //匹配单个小写字母 // / / 符号是正则表达式的界定符,里面包裹正则表达式。 $pattem = '/a/'; $subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 echo '<hr>'; //匹配单个大写字母 $pattem = '/A/'; $subject = '111122223333444455556666777788ABHFGVBNJUYHHDISIO88999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 echo '<hr>'; //匹配0-9任意数字 $pattem = '/1/'; $subject = '111122223333444455556666777788ABHFGVBNJUYHHDISIO88999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 echo '<hr>'; /* \n 匹配一个换行符,等价于:\x0a \r 匹配一个回车符,等价于:\x0d \f 匹配一个换页符,等价于:\x0c \t 匹配一个制表符,等价于:\x09 \v 匹配一个垂直制表符,等价于:\x0b */ $pattem = '/\n/'; $subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 echo '<hr>'; //匹配多个自定义字符 //[1234]匹配1234数字 [0-9]匹配数字集合 [2-5]匹配2345数字 [a-z]匹配小写字母集合 [A-Z]匹配大写字母集合 [0-9a-zA-Z]匹配数字、小写字母、大写字母集合 //( [ ] ) 括号里的匹配符,匹配方括号内指定的任意一个原子 //( [^ ] ) 括号里的匹配符, 匹配除方括号内指定原子以外的任意一个原子 $pattem = '/[a-z]/'; $subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 echo '<hr>'; // ( . ) 括号里的匹配符,匹配除换行符之外的任意一个字符 $pattem = '/12./'; // ( | ) 括号里的匹配符,匹配2个或多个分支 $pattem = '/12|67/'; //( ^ ) 括号里的匹配符,匹配字符串开始位置,一串字符串,必须从这里开始 $pattem = '/^[a-z]/'; //( $ ) 括号里的匹配符,匹配字符串结束位置 $pattem = '/[a-z]$/'; //{n} 表示前面原子出现n次 $pattem = '/[0-9]{3}/'; //{n,} 表示前面原子出现不少于n次 $pattem = '/[0-9]{1,}/'; //{n,m} 表示前面原子至少出现n次,最多出现m次 $pattem = '/[0-9]{1,3}/'; //( * ) 匹配0次、1次或多次前面原子 $pattem = '/[0-9]*/'; //( + ) 匹配1次或多次前面原子 $pattem = '/[0-9]+/'; //(?) 匹配0次或1次前面原子 $pattem = '/[0-9]?/'; // \d 匹配任意一个十进制数,等价于 [0-9] $pattem = '/\d/'; // \D 匹配任意一个除十进制以外的字符,等价于 [^0-9] $pattem = '/\D/'; // \w 匹配任意一个字母/数字/下划线字符,等价于 [0-9a-zA-Z_] $pattem = '/\w/'; // \W 匹配任意一个除字母/数字/下划线之外的字符,等价于 [^0-9a-zA-Z_] $pattem = '/\W/'; // \s 匹配任意一个空白字符(非打印) $pattem = '/\s/'; // \S 匹配任意一个除空白字符以外的字符 $pattem = '/\S/'; // \b 匹配单词边界 $pattem = '/ouyangke\b/'; // \B 匹配除单词边界以外的部分 $pattem = '/yang\B/'; $subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 echo '<hr>'; //特殊字符需要在符号前面增加\转义 //需转义符号: \ * + ? . | ^ $ [ ] ( ) $pattem = '/\+/'; $subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk * + ? . | ^ $ [ ] ( ) ouyangke ouyangke zhulaoshi zhulaoshi'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 echo '<hr>'; //( ) 匹配其整体为一个原子[模式单元],即多个原子组成的大原子 $pattem = '/(PHP中文网|百度)|([0-9])/'; $subject = 'PHP中文网 腾讯 百度云 百度 asdfsdf212fdhdfgh54674fghjfghjk78907dfghdfghdfgh'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 echo '<hr>'; /* 修正符(在界定符后面) 多个修正符可以组合在一起使用 ( U ) 表示取消贪婪模式 正则表达式有:贪婪模式和懒惰模式 正则表达式默认是贪婪模式 */ $pattem = '/ou.*/';//不加修正符 $pattem = '/ou.*/U';//加修正符 $subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 echo '<hr>'; //( i ) 表示和模式进行匹配时忽略大小写 $pattem = '/ouyangke/i'; //( s ) 被匹配的字符串将视为一行来看,包括换行符,换行符将被视为普通字符串。 $pattem = '/OUYANGKE./s'; //( x ) 模式中字符串$pattem的空白忽略不计 $pattem = '/ 0 0 0/x'; $subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk\n OUYANGKE OUYANGKE ZHULAOSHI ZHULAOSHI'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 echo '<hr>';
正则表达式符号的优先级截图如下:
字符串函数练习:
<?php //1. preg_match 执行匹配正则表达式 //2. preg_match_all 执行一个全局正则表达式匹配 $pattem = '/[0-9]/'; $subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk'; $a = preg_match($pattem,$subject,$matches); //preg_match和preg_match_all的区别在于preg_match只会显示出找到的第一条,找到后不会继续找下去了,而preg_match_all还会继续找下去 var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 echo '<hr>'; //3. preg_replace 执行一个正则表达式的搜索和替换,可以是一个数组同时替换多个 $pattem = '/baidu/'; $replacement = '百度'; $subject = '11112222333344445555666677778888999900000baidu aaabbbcccdddeeefffggghhhiiijjjjkkkk'; $a=preg_replace($pattem,$replacement,$subject); var_dump($a); // 输出替换后的字符串 echo '<hr>'; //4. preg_filter 执行一个正则表达式搜索和替换,用法和preg_replace是一样的区别在于 /* * preg_replace()不论发不发生替换,值都保留. * preg_filter()只保留发生替换的值. */ $pattem = array('/ouyangke/','/ximen/'); $replacement = array('欧阳克','西门大官人'); $subject = array( '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk llllmmmmssssooopppqqqqrrrrssswwwvvvzzzxxxx ouyangke ouyangke ouyangke ', 'ouyangke ouyangke ouyangke zhulaoshizhulaoshi zhulaoshi ximen ximen ximen ' ); $a = preg_filter($pattem, $replacement, $subject); var_dump($a); echo '<hr>'; //5. preg_quote 转义正则表达式字符 $subject = '^ouyangke$zhulaoshi=miejue!\ximen&[] '; $a = preg_quote($subject); var_dump($a); echo '<hr>'; //6. preg_grep 返回匹配模式的数组条目 $pattem = '/^(\d+)?\.\d+$/';//小数 $array = array(1, 2, 3.4, 53, 7.9); $a = preg_grep($pattem,$array); var_dump($a); echo '<hr>'; //7. preg_split 通过一个正则表达式分隔字符串 $pattem = '/[\s,]+/'; $subject = 'ouyangke ouyangke zhulaoshi zhulaoshi ximen ximen'; $a = preg_split($pattem,$subject); var_dump($a);