php下正则表达式整理
一、正则表达式的历史背景
1,内容深厚的正则表达式
^.+@.+\\..+$ 形式
字符串搜索与匹配的工具
2,应用范围
手机输入法
Windows文件搜索
linux 列出文件命令
网站用户注册,如邮箱、手机号码的表单验证
-------------------------------------------------------
二、正则表达式函数解析
1,准备工作,在此选择 php 来学习正则表达式
2,事先建立好一个 show() 函数
/**
* description: php正则表达式函数
*/
/**
* @name:show
* @description : output debug
* @param $var : input data
* @return void
*/
function show($var = null){
if ( empty( $var ) ) {
echo 'null';
} elseif( is_array($var) || is_object($var) ){
echo "<pre>";
print_r($var);
echo "</pre>";
} else{
echo $var;
}
}
3,php 中常用的正则表达式函数(使用最频繁),返回匹配到的次数
(1)preg_match($pattern, $subject, [array &$matches]) 只会匹配一次
preg_match_all($pattern, $subject, array &$matches) 匹配所有
以下是代码实例
$pattern = '/[0-9]/';
$subject = 'hdgsah7ghgsj89gsgh7faf432';
$m1 = $m2 = array();
$t1 = preg_match($pattern, $subject, $m1); //$t1 = 1
$t2 = preg_match_all($pattern, $subject, $m2); //$t2 = 7
show($m1); //输出一个一维数组
echo "<hr>";
show($m2); //输出一个二维数组
(2)preg_replace($pattern, $replacement, $subject)
preg_filter($pattern, $replacement, $subject)
代码实例
$pattern = array('/[0123]/','/[456]/','/[789]/');
$subject = array('hdg','sah7','ghgsj','89gsg','h7fa','f432');
$replacement = array('你','好','!');
$str1 = preg_replace($pattern, $replacement, $subject);
$str2 = preg_filter($pattern, $replacement, $subject);
show( $str1 );
echo "<hr>";
show( $str2 );
(3) preg_grep($pattern, array $input)将无法匹配的值过滤掉 阉割版 preg_filter()
(4) preg_split($pattern, $subject)
代码实例
$pattern = '/[0-9]/';
$subject = '这9是2一段3文5字';
$arr = preg_split($pattern, $subject);
show($arr);
输出
Array
(
[0] => 这
[1] => 是
[2] => 一段
[3] => 文
[4] => 字
)
(5)preg_quote($str)
正则运算符转义
(6)正则表达式总结
a,都以preg_开头
b,除preg_quote() 外,第一个参数都是正则表达式
c,preg_match() 表单验证
d,preg_replace () 非法词汇过滤等
三、模式修正
1,概述
界定符、原子、量词、边界控制、模式单元
2,界定符
表示正则表达式开始和结束的位置
$pattern = '/[0-9]/';
$pattern = '#[0-9]#';
$pattern = '{[0-9]}'; //在php中不推荐使用
3, regexpal 工具
用于调试正则表达式
4,原子概念
正则匹配最小单位
可见原子:键盘输出后肉眼可见的字符
不可见原子:换行符、回车、空格
在匹配中文字符时,建议先转换 Unicode http://tool.chinaz.com/Tools/Unicode.aspx
5,原子的筛选方式
| 匹配两个或多个分支选择
[] 匹配方括号中的任意一个原子 [789] 匹配 789 , [a-zA-Z0-9] 匹配字母和数字
[^] 匹配方括号中的原子之外的任意字符 [^789] 匹配非 789
6,元字符(原子的集合)
. 匹配除换行符之外的任意字符
\d 匹配任意一个十进制数字,即 [0-9]
\D 匹配除数字之外的其他字符
\s 匹配一个不可见原子 即[\f\n\r\t\v]
\S 匹配一个可见的原子 [^\f\n\r\t\v]
\w 匹配任意一个数字、字母、或下划线 [0-9a-zA-Z_]
\W 匹配任意一个非数字、字母、或下划线 [^0-9a-zA-Z_]
7,量词
{n} 表示其前面的原子恰好出现 n 次
{n,} 表示其前面的原子最少出现 n 次
{n,m} 表示其前面的原子最少出现 n 次,最多出现 m 次
* 匹配0次,1次或多次其之前的原子 即 {0,}
+ 匹配1次或多次其之前的原子 即 {1,}
? 匹配0次或1次其之前的原子
举例子 5{2} ---- 55
[a-zA-Z]{2} ---- ad1256135AW
[\w]{4} ---- 连续出现4次字母、数字、下划线
[\w]{4,8} ---- 4到8次字母、数字、下划线
\d+ ---- 1到无穷大次数字出现
8 ,边界控制
^ 匹配字符串开始的位置
$ 匹配字符串结束的位置
() 匹配其中的整体为一个原子
9,修正模式
贪婪匹配 匹配结果有歧义时取其长
懒惰匹配 匹配结果有歧义时取其短 标识 U
i 忽略英文大小写
x 匹配过程中忽略空白 ,包括空格和制表符
s 让元字符' . '匹配包括换行符在内的所有字符
四、正则表达式实战
1,非空: .+
2, 匹配一个保留两位小数的浮点数: \d+\.\d{2}$
3, 大陆手机号: ^1(3|5|4|7|8)\d{9}
4, email地址: ^\w+(\.\w)*@\w+(\.\w)+$
5,url 地址: ^(https?://)?(\w+\.)+.[a-zA-Z]+$
五、正则表达式实战——正则表达式工具类
'require' => '/.+/',
'email' => '/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/',
'url' => '/^http(s?):\/\/(?:[A-za-z0-9-]+\.)+[A-za-z]{2,4}(?:[\/\?#][\/=\?%\-&~`@[\]\':+!\.#\w]*)?$/',
'currency' => '/^\d+(\.\d+)?$/',
'number' => '/^\d+$/',
'zip' => '/^\d{6}$/',
'integer' => '/^[-\+]?\d+$/',
'double' => '/^[-\+]?\d+(\.\d+)?$/',
'english' => '/^[A-Za-z]+$/',
'qq' => '/^\d{5,11}$/',
'mobile' => '/^1(3|4|5|7|8)\d{9}$/'
php下正则表达式整理的更多相关文章
- python正则表达式整理
正则表达式在处理字符串时很大的作用,爬虫中也经常用到,下面就将一些常用正则表达式做一整理记录,方便以后查看. ^d 表示匹配以d开头的字符串 . 表示匹配任意字符串 * 表示前面 ...
- jquery下常用正则表达式整理(可直接粘贴使用)
与正则表达式做比较的方法 var _val = '1234'; var _ev = /^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z] ...
- [转].NET进阶系列之一:C#正则表达式整理备忘
本文转自:http://www.cnblogs.com/KissKnife/archive/2008/03/23/1118423.html 有一段时间,正则表达式学习很火热很潮流,当时在CSDN一天就 ...
- .NET进阶系列之一:C#正则表达式整理备忘
有一段时间,正则表达式学习很火热很潮流,当时在CSDN一天就能看到 好几个正则表达式的帖子,那段时间借助论坛以及Wrox Press出版的<C#字符串和正则表达式参考手册>学习了一些基础的 ...
- 常用JavaScript正则表达式整理
在表单验证中,正则表达式书写起来特别繁琐,本文整理了15个常用的JavaScript正则表达式,其中包括用户名.密码强度.整数.数字.电子邮件地址(Email).手机号码.身份证号.URL地址. IP ...
- .net 中常用的正则表达式整理
相信很多伙伴都跟我一样有关于正则表达式的爱和恨,怎么说呢? 因为正则表达式规则繁多且复杂,想一个一个学 全部精通,需要耗费很长时间和精力, 但是我们用的地方并不是很多,所以我觉得这类东西需要做成类似工 ...
- linux下正则表达式学习
下表包含了元字符的完整列表以及它们在正则表达式上下文中的行为: 字符 描述 \ 将下一个字符标记为一个特殊字符.或一个原义字符.或一个 向后引用.或一个八进制转义符.例如,'n' 匹配字符 " ...
- Linux基础-正则表达式整理---------------grep、sed、awk
目录: Ⅰ:正则表达式 Ⅱ:作业 Ⅰ:正则表达式 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. 在lin ...
- 正则表达式 整理(\w \s \d 点 贪婪匹配 非贪婪匹配 * + ? {} | [] ^ $ \b 单词边界 分组、re.findall()、re.split()、re.search()、re.match()、re.compile()、re.sub())
re.findall 匹配到正则表达式的字符,匹配到的每个字符存入一个列表,返回一个匹配到的所有字符列表 一. 匹配单个字符 import re # \w 匹配所有字母.数字.下划线 re.find ...
随机推荐
- Oracle分区知识
查询分区名称.表空间的SQL USER_SEGMENTS SELECT SEGMENT_NAME,PARTITION_NAME,TABLESPACE_NAME FROM USER_SEGMENTS; ...
- CDOJ 1259 昊昊爱运动 II bitset+线段树
题目链接 昊昊喜欢运动 他N天内会参加M种运动(每种运动用一个[1,m]的整数表示) 现在有Q个操作,操作描述如下 昊昊把第l天到第r天的运动全部换成了x(x∈[1,m]) 问昊昊第l天到第r天参加了 ...
- 解决windows7搜索不了txt文本内容的问题
windows7默认的搜索框是只搜索文件名,若是要文件内容的话,需要这样设置: 打开"我的电脑",左上角"组织"→"文件夹和搜索选项"→&q ...
- 修改LVDS支持1024*600分辨率
一.在boot中增加LVDS设置分辨率1024*600选项 1.修改文件TQIMX6_android-4.2.2\bootable\bootloader\uboot-imx\common\cmd_me ...
- RatProxy
http://book.51cto.com/art/201212/374023.htm http://www.oschina.net/p/ratproxy/similar_projects
- 射频识别技术漫谈(20)——RC系列射频接口芯片
目前基于13.56MHz的射频识别技术主要有ISO14443A.ISO14443B.ISO15693和FELICA技术.针对13.56MHz的射频识别技术,NXP开发了一系列名字以RC(Radio C ...
- mget 同时获取
mget 同时获取: http://192.168.32.81:9200/ _mget POST { "docs" :[ { "_index":"li ...
- Mysql 创建联合主键
Mysql 创建联合主键2008年01月11日 星期五 下午 5:21使用primary key (fieldlist) 比如: create table mytable ( ...
- Winet API 支持HTTPP/SOCKS代理
源程序 1.Winet API 支持使用IE代理.或者不使用代理.或者使用自定义代理三种方式. 2.使用自定义代理的话,支持HTTP代理,SOCKS代理,但是SOCKS代理不知支持用户名密码,HTTP ...
- cocos2d-x 源代码 :可以循环CCScrollView (,代码已被重构连接使用)
cocos2d-x来源合计文件夹 http://blog.csdn.net/u011225840/article/details/31743129 1.准备工作 想弄懂可循环的CCscrollView ...