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 ...
随机推荐
- ThinkPHP第十五天(setField、setInc、setDec、关联模型)
1.ThinkPHP中的比较特殊连贯操作 如果要更新某个字段可以用setField方法,比如M('user')->where('id=1')->setField('username','T ...
- 【转】VPN服务器配置详解
参考博文: VPN服务器配置详解 等公司上服务器开始配置 vpn
- 简单的Coretext 图文混排
在很多新闻类或有文字展示的应用中现在都会出现图文混排的界面例如网易新闻等,乍一看去相似一个网页,其实这样效果并非由UIWebView 加载网页实现.现在分享一种比较简单的实现方式 iOS sdk中为我 ...
- TexturePacker
TexturePacker 可以免费申请,希望可以申请到.
- 中国天气网API
中国天气网有三个 API 适用于不同场合的使用. http://m.weather.com.cn/data/101050101.html 这个接口返回的格式如下. { "weatherinf ...
- android service和activity的通讯
我们须要用下面方式来启动service: </pre><pre name="code" class="java"><span st ...
- 让自己的apk可以被别人用二维码下载
通过二维码下载的流程是, 1.截获地址当有一个url被二维码扫描后的被截获,请先确认能够被截获. 2.接受intent无论是把这个消息的地址发送给activity,还是reciver,都要进入到你的程 ...
- C#利用委托跨线程更新UI数据
转:http://www.2cto.com/kf/201206/136587.html 在使用C#的过程中,难免会用到多线程,而用多线程之后,线程如何与界面交互则是一个非常头疼的问题.其实不仅仅是界面 ...
- ie调试控制台
function initConsole() { var console = document.createElement('div'); console.id = 'errorConsole'; d ...
- 【前端】一句命令快速合并压缩 JS、CSS
引用自:一句命令快速合并 JS.CSS 在项目开发环境下,我们会把 JS 代码尽可能模块化,方便管理和修改,这就避免不了会出现一个项目自身 JS 文件数量达到10个或者更多. 而项目上线后,会要求将所 ...