regular1.php: <?php //尝试着写第一个正则表达式 //第一个参数,表示模式,表示匹配模式(就是和字符串去比较、匹配) //第二个参数,表示字符串 //如果整个函数模式和字符串比较后匹配了,那么返回真(true)1,否则返回假(false)0 //什么叫匹配,就是一个一个的比较过去 //按照什么规则??按照模式来匹配 //只要模式全部通过,那么就通过 //匹配和相等是两个概念 //因为目前的模式是一个整体,php //所以,字符串只要有连在一起的php三个字符,不管怎样的字符串都能匹配 $mode = '/php/'; //规则模式 $string = 'sdlkfjwehsdlfkjpsdlfkjshersidjflkspdf'; //字符串 if (preg_match($mode,$string)) { echo '匹配'; } else { echo '不匹配'; } // if ('a'=='b') { // echo '相等'; // } else { // echo '不等'; // } //什么叫前导,前面的一个字符 //+号的前导字符就是h //h+的意思是,至少包含一个h //+号的意思,是前导字符,一个或者多个 //h*的意思是,零个或者多个h //*号虽然可以是零个,但是前导字符不能更改,更改了,就不匹配了 //h?的意思是,零个或者一个h //?多个前导字符不行 //.的意思是,任意一个字符,所以,两个点,就是任意两个字符 //.*表示前导任意字符,并且零个或者多个 //p{3}表示,前导必须是3个 //p{3,5}表示,前导必须是3-5个 //p{3,}表示,前导至少3个p //$符号,一般加在模式的字符串尾巴上 //表示从尾巴开始匹配 //^表示,从开头进行匹配 //^和$一起用的,基本上不要用正则了,直接用==号即可 //|是一个条件选择符,如果有其中一个,即可匹配。 $mode = '/(This) (is) (a) (Teacher)/'; //规则模式 $string = 'This is a Teacher'; //字符串 if (preg_match($mode,$string)) { echo '匹配'; } else { echo '不匹配'; } ?> regular2.php: <?php /** * 正则表达式中的元字符: * [a-z] 匹配任何包含小写字母a-z的字符串.如果第一个匹配成功,则后面的就不进行匹配。结果为成功。 * [A-Z] 匹配任何包含大写字母a-z的字符串 * [0-9] 匹配任何包含数字0-9的字符串 * [abc] 匹配任何包含小写字母a、b、c的字符串 * [^abc] 匹配任何不包含小写字母a、b、c的字符串 * [a-zA-Z0-9_] 匹配任何包含a-zA-Z0-9和下划线的字符串 * \w 匹配任何包含a-zA-Z0-9和下划线的字符串 * \W 匹配任何没有下划线和字母数字的字符串 * \d 匹配任何数字字符,与[0-9]相同 * \D 匹配任何非数字字符,与[^0-9]相同 * \s 匹配任何空白字符 * \S 匹配任何非空白字符 * \b 匹配是否到达了单词边界。(代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是\b并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置。) * \B 匹配是否没有到达单词边界 * \ 匹配正则中的特殊字符 */ // [a-z] 表示将待比较的字符串逐个与模式进行匹配,只要有一个能匹配到模式中的,结果为成功 $mode = '/[a-z]/'; $string ='0i'; //也可以。先匹配s,如果匹配到,则结果为成功 if ( preg_match($mode, $string)){ echo '[]字母元素匹配成功'; }else{ echo '[]字母元素匹配失败'; } echo '<br/>'; // [0-9] 表示将待比较的字符串逐个与模式进行匹配,只要有一个能匹配到模式中的,结果为成功 $mode = '/[0-9]/'; $string ='bc1'; //也可以。依次匹配a b 1,如果1匹配到了,则结果为成功 if ( preg_match($mode, $string)){ echo '[]数字元素匹配成功'; }else{ echo '[]数字元素匹配失败'; } echo '<br/>'; // [abc] 表示将待比较的字符串逐个与模式进行匹配,只要有一个能匹配到模式中的,结果为成功 $mode = '/[abc]/'; $string ='db'; //也可以。依次匹配d b,如果匹配到,则结果为成功 //$string = db' //成功 if ( preg_match($mode, $string)){ echo '[]abc元素匹配成功'; }else{ echo '[]abc元素匹配失败'; } echo '<br/>'; // \d与[0-9]功能相同 $mode = '/\d/'; $string ='bc9'; //也可以。依次匹配a b 1,如果1匹配到了,则结果为成功 if ( preg_match($mode, $string)){ echo '\d元素匹配成功'; }else{ echo '\d元素匹配失败'; } echo '<br/>'; // \b表示到达了单词的边界,如果没有到达,就不匹配。如果放在结尾,边界可以理解为结束或空格 //如果\b放在最开始,代表单词的开始或空格 $mode = '/\bphp/'; $string ='my php is good'; //也可以。 if ( preg_match($mode, $string)){ echo '\b元素匹配成功'; }else{ echo '\b元素匹配失败'; } echo '<br/>'; // 如果要匹配特殊字符的话,必须在特殊字符前加上\进行转义 $mode = '/ph\+p/'; $string ='ph+p'; //也可以。 if ( preg_match($mode, $string)){ echo '\元素匹配成功'; }else{ echo '\元素匹配失败'; } echo '<br/>'; ?> regular3.php: <?php /** * 正则表达式中的修饰符:一般放在//的外面。 * i 完成不区分大小写的搜索 * m 在匹配首内容或尾内容时采用多行识别匹配 * x 忽略正则中的空白 * A 强制从头开始匹配 * U 禁止贪婪匹配,只跟踪到最近的一个匹配符结束 */ $mode = '/php/i'; $string ='pHp'; //也可以。 //$string ='pHpadadf'; //也可以。 if ( preg_match($mode, $string)){ echo 'i修饰符匹配成功'; }else{ echo 'i修饰符匹配失败'; } echo '<br/>'; //m 表示匹配首尾时,遇到换行,也应该承认是结尾。不太常用 $mode = '/php/im'; $string ="this is pHp\n is good"; //也可以。 //$string ='pHpadadf'; //也可以。 if ( preg_match($mode, $string)){ echo 'm修饰符匹配成功'; }else{ echo 'm修饰符匹配失败'; } echo '<br/>'; ?> regular4.php: <?php /** * 函数应用: * 搜索字符串:preg_grep()函数搜索数组中的所有元素,返回由与某个模式匹配的所有元素组成的数组 * prge_match():函数在字符串中搜索模式,如果存在则返回true,否则返回false * prge_replace:函数搜索到所有匹配,然后替换成想要的字符串返回出来。功能强大,常用 * */ //假设找出结尾为p的三种编程语言 $language = array('php','jsp','asp','python','ruby'); //模式:结尾匹配p $mode = '/p$/'; //模式:开头为p的模式 //$mode = '/^p/'; print_r (preg_grep($mode, $language)); echo "<br/>"; //电子邮件小案例 $mode = '/([\w\.]{2,255})@([\w]{2,255}).([a-z]{2,4})/'; $string = '13656891089s@139.com'; if (preg_match($mode, $string)){ echo '电子邮件合法'; }else { echo '电子邮件不合法'; } echo "<br/>"; //匹配全局正则 //将字符串的所有匹配得到的数组结果,放进第三个变量中 preg_match_all('/php[1-6]/', 'php5adkafphp6kikikdphp4', $out); print_r ($out); echo $out[0][0]; echo "<br/>"; //搜索匹配的结果,然后替换掉。第1个对数为正则模式,第2个参数是要被替成的字符串,第3个参数为字符串 echo preg_replace('/php[1-6]/', 'python', 'This is php5,This is php4'); //上句输出结果为: This is python,This is python echo "<br/>"; //贪婪和分组获取的案例 //在mode中,用几个括号,就表示分几组,那么第一组就是\1,第二组就是\2,第三组就是\3,... //问题:只匹配到第一个[b]和最后一个[/b],解决此问题需要在mode中加入U参数,来使与最近的配对。 $mode = '/\[b\](.*)\[\/b\]/U'; $replace ='<strong>\1</strong>'; // \1表示引用第一个括号的.*内容 $string ='this is a [b]php5[/b],this is [b]php6[/b]'; echo preg_replace($mode, $replace, $string); echo "<br/>"; //用正则表达式来分割 print_r(preg_split('/[\.@c]/', 'hyc@cmca.org.cn')) ;//表示按.或@或c符号来分割 ?> |
|