博客列表 >第22章 php正则表达式-2019年10月17日20时00分

第22章 php正则表达式-2019年10月17日20时00分

Tommy-黄天浩的博客
Tommy-黄天浩的博客原创
2019年11月08日 19:25:35733浏览

正则表达式练习:

<?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>';

正则表达式符号的优先级截图如下:

QQ截图20191108190528.png


字符串函数练习:

<?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);


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议