管理员要是看到该文章放到博客园首页了,还请麻烦给移除。

因为这只是个人的笔记,没有细入去研究

  1 <?php
  2  header("content-Type:text/html; charset=utf-8");
  3  echo '<pre>';
  4  /**
  5   *    PHP正则的学习笔记
  6  */
  7  ?>
  8     元字符
  9         代码    说明
 10         .        匹配除换行符以外的任意字符
 11         \d        匹配数字 [表示数字 0-9]
 12         \D        匹配除数字意外的任意字符 [\d的反义]
 13         \w        匹配字母或数字或下划线或汉字 [表示数字、字母、下划线、汉字 0-9 a-z A-Z]
 14         \s        匹配任意的空白符 [表示任意的空白符:空格 ,制表符\t,换行符\n,回车\r,分页\f,垂直制表\v,中文全角空格等]
 15         \S        匹配所有的非空白字符 [\s的反义]
 16         \b        匹配单词的开始或结束 [匹配单个单词]
 17         ^        匹配字符串的开始 [用来匹配要查找字符串的开头 所有的字符都用于比较]
 18         $        匹配字符串的结束 [和\b、^ 类似,区别在于 $ 为结尾处 所有的字符都用于比较]
 19     正则 模式修正符
 20         特点:多个模式修正符可以放在一块使用
 21         m    整个字符串按多行来进行匹配。可以理解为将字符串里符合的内容全部匹配出来
 22         i    不区分大小写模式的匹配
 23         x    忽略掉匹配表达式里[正则表达式]的空格
 24         U    匹配最近的字符串,禁止贪婪匹配
 25         A    强制从^字符串开始算起,必须配合^使用
 26         D    只匹配到$符号的位置处 设置了m就没用了
 27         e    把替换字符串当成一个表达式使用。类似eval()函数
 28
 29     限定字符
 30         代码    说明
 31         *        重复零次或多次 [任意次数]
 32         +        重复一次或多次 [至少会出现一次]
 33         ?        重复零次或一次 [可能会出现一次]
 34         {n}        重复 n 次
 35         {n, }    重复 n 次或者更多次 [重复n次以上:包括n次] {TIP:貌似达不到预期}
 36         {n,m}    重复 n 到 m 次
 37
 38     分歧条件
 39         |        或 [从左往右检测。如果左边的规则符合,右边的规则将不会去匹配]
 40
 41     分组
 42
 43
 44     后向引用:
 45          捕获:
 46              (exp)    匹配exp字符串,并自动分配组号
 47              (?<name>exp)    匹配exp字符串,并分配到组号为name的分组里
 48              (?:exp)    不匹配exp字符串,并且也不分配组号
 49          零宽断言(字符串分割匹配?):
 50              (?=exp)        匹配以exp结尾的字符,匹配结果不包括exp
 51              (?<=exp)    匹配一exp开头的字符,匹配结果同样不包括exp
 52          负向零宽断言(可以看做 '[^exp]' 的反义)
 53              (?!exp)        某字符串后边不是exp的
 54              (?<!exp)    某字符串前边不是exp的
 55          注释:(?#comment)    注释,给人看的
 56
 57      贪婪与懒惰:
 58          贪婪可以理解为尽可能多的匹配重复的字符
 59          懒惰可以理解为尽可能少的匹配重复的字符(尽可能少?搞不明白)
 60              示例语法:
 61                  *?、+?、??、{n,m}?、{n,}?
 62
 63     EXP:
 64         \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} 匹配简单IP
 65 <?php
 66 echo '<br><hr><br>';
 67 echo '<h3>原子表 []</h3>';
 68 echo '<p>原子表将[]里的内容依次匹配,不当做整体去匹配,只要一个符合即返回true</p>';
 69 echo '<p>如果原子表里有 ^ ,表示不是!即非</p>';
 70 echo '$str = \'cntnn11.com\';<br/>';
 71 echo '$preg = \'/n2/is\';<br/>';
 72 echo '$preg2 = \'/[n2]/is\';<br/>';
 73 echo 'preg_match($preg, $str) = 0<br/>';
 74 echo 'preg_match($preg2, $str) = 1<br/>';
 75 echo '<br><hr><br>';
 76
 77 echo '<h3>正则 原子组 ()</h3>';
 78 echo '<p>把多个字符串分成一组,我们对多个字符串操作</p>';
 79 echo '<p>匹配出来的内容会放入一个内存,可以后期使用。在正则语句里使用\Num来表示原子组的编号 [如果正则在双引号里,需要对\进行转义]</p>';
 80 $str = "
 81     <html>
 82         <body>
 83             <h1>XX网php视频教程</h1>
 84             <h2>XX教程</h2>
 85             <h5>这是h5</h5>
 86             <p>www.baidu.com</p>
 87             <p>www.xxx.org</p>
 88             <p>map.google.com.cn</p>
 89         </body>
 90     </html>";
 91 $preg = "/<(h[\d])>(.*?)<\/(\\1)>/";    //
 92 preg_match_all($preg, $str, $arr, PREG_SET_ORDER);
 93 $preg_replace = "<\\1>\\2 -> 替换结果<\\3>";
 94 $str = preg_replace($preg, $preg_replace, $str);
 95 echo $str,'<br/>';
 96 echo '<p>如果在原子组里边加上 ?: 则表示不将该分组的内容进行缓存</p>';
 97 echo '<p>测试内容缓冲 ?: 获取网址,输出各网址的后缀名</p>';
 98 //$preg    = "/(www|map)\.\w+((\.)(com\.cn|com|org))/";    //获取所有匹配到的内容
 99 $preg    = "/(?:www|map)\.\w+((\.)(com\.cn|com|org))/";    //只匹配url后缀
100 $preg    = "/(?:www|map)\.\w+((?:\.)(?:com\.cn|com|org))/";    //只匹配url的.com.cn/.com/.org...
101 preg_match_all($preg, $str, $arr);
102 var_dump($arr[1]);
103 echo '<p>注释:(?#各种字符) 放在正则块的后边</p>';
104
105 echo '<br><hr><br>';
106 echo '<h3>正则重复匹配</h3>';
107 echo '<p>exp:给php文件的注释里添加上\'@author cntnn11\'内容</p>';
108 $file    = file_get_contents('phppreg/134.php');
109 $preg    = "/(\/\*+)(.*)?(\*\/)/is";    //找出该文件中的注释部分。格式为:/** ... */
110 //preg_match_all($preg, $file, $arr, PREG_SET_ORDER);
111 //var_dump($arr);
112 $replace    = "\\1 \\2 *\t@author cntnn11 \r\n \\3";
113 $data    = preg_replace($preg, $replace, $file);
114 file_put_contents("phppreg/134demo.php", $data);
115
116 echo '<br/><hr></br>';
117 echo '<h3>匹配一个email格式</h3>';
118 echo '<p>email exp:</p>';
119 $email    = "alkdls email@.qq.com **78ajkdsfh google@gamil.com oi4 msn@live.cn 45u43oi self.cntnn11@cntnnn11.com 45645 company@com.company";
120 $preg    = "/(\w+)@(\w+)\.(\w+)/is";
121 preg_match_all($preg, $email, $emailArr);
122 var_dump($emailArr);
123
124 echo '<br/><hr></br>';
125 echo '<h3>匹配一个整数格式</h3>';
126 echo '<p>int Num exp:</p>';
127 $num    = '456 545 87d 54- -48 0 53.0 56';
128 $preg    = "/-?(\d+)/ism";
129 preg_match_all($preg, $num, $numArr);
130 var_dump($numArr);
131
132 echo '<br/><hr></br>';
133 echo '<h3>匹配一个座机号码</h3>';
134 echo '<p>tel exp:</p>';
135 $tel    = '010-12345678 | (010)12345678 | 12345678 | 0731-1234567 | (0731)1234567 | 1234567';
136 $preg    = "/(\([0-9]{3,4}\)|([0-9]{3,4})?|\d{3,4}-)\d{7,8}/ism";
137 preg_match_all($preg, $tel, $telArr);
138 var_dump($telArr);
139
140 echo '<br><hr><br>';
141 echo '<h3>正则搜索替换函数 preg_replace()</h3>';
142 echo '<p>preg_replace($pattern, $replacemenet, $subject, $limit, $count) [该函数与str_replace很相似,返回替换后的字符串]</p>';
143 echo '<p>$pattern:在$subject中被搜索的对象 [传入一个正则表达式,此处可以传入一个数组,包含多个表达式]</p>';
144 echo '<p>$replacemenet:用来替换匹配$pattern的内容 [传入一个正则表达式]</p>';
145 echo '<p>$subject:要操作的字符串</p>';
146 echo '<p>$limit:每个模式替换的次数 [默认-1,无限次替换]</p>';
147 echo '<p>$count:返回每替换一次就进行记录的变量 </p>';
148 echo '';
149 $str    = "我是一段字符串,字符串啊字符串!1234.。。。、5678!go go 够 足球go";
150 $pattern    = "/[\d*]/";
151 $replace    = "*";
152 echo preg_replace($pattern, '*', $str, 5),'<br />';
153
154 echo '<h3>prge_replace_callback()</h3>';
155 echo '<p>在获取到匹配后的字符串后,再去调用一个回调函数进行处理<p>';
156
157
158 echo '<br><hr><br>';
159 echo '<h3>正则搜索替换函数 preg_filter()</h3>';
160 echo '<p>preg_filter($pattern, $replacemenet, $subject, $limit, $count)</p>';
161 echo '<p>如果$subject是一个数组,那么匹配到则返回数组,否则空数组array()</p>';
162 echo '<p>其他情况则返回字符串,没匹配到则返回NULL</p>';
163 echo '<p>他会将匹配的元素返回来。没有匹配的元素则不返回</p>';
164 echo '<p></p>';
165 echo '';
166
167 $pattern = array('/\d/', '/[a-z]/', '/[1a]/');
168 $replace = array('t:$0', 'B:$0', 'C:$0');
169 $subject = array('1', 'a', '2', 'b', '3', 'A', 'B', '4');
170
171 echo "preg_filter returns\n";
172 print_r(preg_filter($pattern, $replace, $subject));
173 /*Array
174 (
175       [0] => A:C:1
176       [1] => B:C:a
177       [2] => A:2
178       [3] => B:b
179       [4] => A:3
180       [7] => A:4
181 )*/
182
183
184 echo '<br><hr><br>';
185 echo '<h3>返回匹配模式的数组条目 preg_grep()</h3>';
186 echo '<p>preg_grep($pattern, $inArray)</p>';
187 echo '<p>返回$inArray中匹配$pattern的元素</p>';
188 echo '<p>他的匹配与数组键名无关,只会与元素的值去匹配</p>';
189 $inArray    = array(0=>'nicaia123', 1=>'nicai', 'a'=>345, 'd'=>'中文', 4=>'-');
190 $pattern    = '/\d/';
191 $inArray    = preg_grep($pattern, $inArray);
192 var_dump($inArray);
193
194
195 echo '<br><hr><br>';
196 echo '<h3>返回匹配模式的数组条目 preg_match()</h3>';
197 echo '<p>preg_match($pattern, $inArray[, $arr, $offset])</p>';
198 echo '<p>返回$inArray中匹配$pattern的元素</p>';
199 echo '<p>他的匹配与数组键名无关,只会与元素的值去匹配</p>';
200 echo '<p>第三个参数$arr可以当做一个返回值,如果设置了那么将返回一个数组</p>';
201 echo '<p>主要用于判断正则是否成功匹配字符串。类似于stripos()函数</p>';
202 $inArray    = array(0=>'nicaia123', 1=>'nicai', 'a'=>345, 'd'=>'中文', 4=>'-');
203 $pattern    = '/\d/';
204 $inArray    = preg_grep($pattern, $inArray);
205 var_dump($inArray);
206
207 echo '<br><hr><br>';
208 echo '<h3>执行一个全局正则表达式匹配 preg_match_all()</h3>';
209 echo '<p>与preg_match()类似,区别在于该函数将返回所有匹配到的内容,而preg_match()只返回一次匹配到的内容</p>';
210
211
212 echo '<br><hr><br>';
213 echo '<h3>执行正则分隔字符串 preg_split()</h3>';
214 echo '<p>该函数将一段字符串按照正则规则进行分割,返回一个数组</p>';
215 echo '<p>该函数同explode(),str_split()类似。将一串字符串按照一定规则进行分隔成数组</p>';
216 $str    = "If you need to split a list of 'tags' while allowing for user error, you'll find this more useful than the manual's first example.";
217 $pattern    = '/n/';
218 $rs        = preg_split($pattern, $str);
219 var_dump($rs);
220
221
222 echo '<br><hr><br>';
223 echo '<h3>练习</h3>';
224 echo $subject    = "XX论坛bbs.xxg.comXX官网www.xxg.com245';统计第一个;号前的.com出现多少次";
225 preg_match_all('/(.com)(;)$/', $subject, $arr);
226 var_dump($arr);
227
228
229
230  ?>

转载于:https://www.cnblogs.com/cntnn11/archive/2012/11/27/2610569.html

preg使用。还是一样,只是个人记录,不放博客园首页相关推荐

  1. 我的博客园开张了,记录每天学习,工作。

    我的博客园开张了,记录每天学习,工作. 转载于:https://www.cnblogs.com/littlepearl/archive/2012/04/02/2430152.html

  2. 记录本地Hexo博客部署到服务器上

    文章目录 前言: 武汉加油,中国加油! 一.服务器使用 二.部署博客 环境部署 服务器配置 0x01: 创建私有 Git 仓库 0x02:配置 Nginx 托管文件目录 0x03:创建 Git 钩子 ...

  3. Mysql查询表中每行数据大小_计算数据库中各个表的数据量和每行记录所占用空间的脚本-转载来自(博客园 桦仔)...

    本文出处: 感谢桦仔 的分享精神! 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tablespaceinfo ( nameinfo  ...

  4. 计算数据库中各个表的数据量和每行记录所占用空间的脚本-转载来自(博客园 桦仔)...

    本文出处: http://www.cnblogs.com/lyhabc/p/3828496.html 感谢桦仔 的分享精神! 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享 ...

  5. document.location的用法实例(摘抄自博客园--KoMiles,自己学习的时候记录一下)...

    <head><title>document.location </title></head><body><b>document. ...

  6. 博客园——记录我的开始

    终于在博客园给自己安家了,希望在这里结交更多的朋友,与大家一起交流,一起学习.avance!!! 转载于:https://www.cnblogs.com/xianglei/archive/2012/1 ...

  7. 博客园win8客户端开发记录5-app设置 登录 回复评论

    这段时间完成了博客园cnblogs登录,注销和设置的相关功能 ,进入软件, 打开win8的charm setting 选择设置就是当前软件的设置选项了, 感觉这有点山寨mac os x系统(所有软件包 ...

  8. 来到博客园 就要好好记录 分享技术

    博客园是面向程序员的高品质的IT技术学习与分享平台,博客是学习与分享知识的工具. 转载于:https://www.cnblogs.com/ricasky/p/3422282.html

  9. 我的博客园博客设计更新记录

    本博客的原始皮肤来自:http://www.cnblogs.com/libaoheng/archive/2012/03/19/2406836.html 2013年9月16日20:17:14 添加红色萤 ...

最新文章

  1. Redis笔记系列(特别总结篇)——常见配置redis.conf知识点总结
  2. 【Network Security!】入侵痕迹清除,修改系统日志
  3. 7-17 爬动的蠕虫 (15 分)
  4. javascript实例——鼠标特效篇(包含2个实例)
  5. oracle 11g的audit导致system表空间快速增长的问题
  6. Path.GetExtension 方法
  7. python中的isinstance()使用方法[探索2]
  8. 如何移动没有标题的窗体
  9. Django 国际化和本地化
  10. Javascript模块化编程:require.js的用法
  11. 浏览器往返缓存(Back/Forward cache)问题的分析与解决
  12. matlab均值方差模型,马科维茨均值方差模型的Matlab实现
  13. 腾讯云TBase分布式数据库安装部署
  14. mac分区后数据丢失怎么恢复?
  15. [TF进阶] 卷积神经网络
  16. ubuntu ibus拼音异常
  17. 暴雪战网国际版[国区登录战网国际版方法]
  18. 无线局域服务器架设方法,技巧:如何实现局域网架设BT服务器
  19. C1 驾驶证考试科目二考试心得
  20. 来把三子棋吗?创建属于你的三子棋。

热门文章

  1. python向lt新增5个元素_Python学习第十一课-MOOC嵩天
  2. 管理员拥有系统最高以及所有权限嘛_企业微信管理员是谁?企业微信管理员可以变更转让吗?...
  3. 用python画出圣诞树_【闲趣】如何用python画出一棵圣诞树
  4. 使用echarts(三)自定义图表仪表盘
  5. 获取第三方应用的签名
  6. linux中info功能是什么意思,Linux中的info指令
  7. 几天后自动领取java怎么做的_学了14天,终于把Java项目一做完啦
  8. Jdk自带bin目录命令
  9. 快速修剪技巧_20个相见恨晚的CAD画图神技巧,让你效率飞升!
  10. wireshark linux远程,如何在SSH连接Linux的环境下使用wireshark抓包云边端架构?