博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(独孤九剑)--正则表达式
阅读量:5025 次
发布时间:2019-06-12

本文共 2620 字,大约阅读时间需要 8 分钟。

【一】适用场景

邮箱验证,手机号码,验证码,替换敏感词(骂人换成**),文档采集,表情替换技术(早期),模板引擎解析

 

【二】定界符

定界符就是用来定义边界

注意:定界符不能用a-zA-Z0-9和 \和(),其他都可以用,但必须成对出现,又开始有结束

区分 \ 和 /,\ 为转义字符, / 为正则字符

转义字符:将 / 转为字符串形式,因为例如$str = '/ / /'这种形式的正则无法识别中间的/,所以需要 \ 转义字符,将中间的 / 转义为符号才能使用。

例如需要正则匹配 \ 时:

$str = '/ \/ /'; 或者 $str = "/ '/' /"; 或者修改定界符 $str = "@ / @"

定界符写法举例:

最常用的为/

 

【三】元字符

^,\d及$等符号代表了特定的匹配意义,我们称之为元字符,常见元字符有

.       除换行符外任意字符;

\w    a-zA-Z0-9(字母或数字、下划线);-----word字母

\s     空白符\n,\t,\r,空格;-----------------spacing间隙

        空白符是指空格符' '、水平制表符'\t'、垂直制表符'\v'、换行符'\n'、回车符'\r'、换页符'\f'之类的字符

\d    0-9数字;---------------------------digit数字

\b    词边界(单词的开始或结束);---------begin开始

^     字符串开始;

$     字符串结束;

[x]   匹配x字符,如匹配字符串里的a,b,c字符;

\W   \w的转义,除了a-zA-Z0-9之外的任意字符;

\S   匹配任何非空白的字符;

\D   0-9以外,匹配任何的字符;

\B   非边界(匹配不是单词开头或结束位置的字符);

[^x] 匹配除了x以外任意字符,如[^abc]匹配除了abc以外任意字符

      例如:[^0-9a-zA-Z]中因为有抑扬符,所以变成了匹配0-9a-zA-Z之外的字符

注意:

①当我们要匹配这些元字符的时候,我们需要用到字符转义功能,同样正则表达式里面用 \ 来表示转义,如要匹配 . 符号,则需要用 \. ,否则 . 会被解释成“除换行符外的任意字符”。当然,要匹配 \ ,则需要写成 \\

②连续的数字或字母可以用 – 符号连接起来,如 匹配所有的小写字母,[1-5] 匹配 1 至 5 这 5 个数字

 

【四】正则表达式中的原子(最小单位)

原子是正则表达式的最小单位,一个成立的正则表达式必须至少包含一个原子

包含:空格,a-zAZ,换行,0-9,中文,标点符号,特殊符号等全为原子

原子等价式:

\d      0-9

\w     a-zA-Z0-9
\s      \t,\n,\v,\r,空格
\D     [^0-9]
\W    [^a-zA-Z0-9]
\S     [^\t\n\f\r]

 

【五】循环字符

正则表达式用一些重复规则来表达循环匹配

常用的重复如下:

*           重复0次或更多次;

+          重复1次或更多次;

?        重复0次或1次;

{n}       有且只能重复n次;

{n,}      至少重复n次;

{n,m}   可以重复n到m次;

 

【六】正则函数

  preg_match() 第一次匹配成功后就会停止匹配,如果要实现全部结果的匹配,即搜索到subject结尾处,则需使用 preg_match_all() 函数

(1)php匹配正则函数:preg_match()

preg_match() 函数用于进行正则表达式匹配,成功返回 1 true,否则返回 0 false。

preg_match() 匹配成功一次后就会停止匹配,如果要实现全部结果的匹配,则需使用preg_match_all() 函数。

 语法:preg_match(正则表达式,匹配变量,存储匹配结果的数组)

 (2)preg_match_all()

preg_match_all() 函数用于进行正则表达式全局匹配,成功返回整个模式匹配的次数(可能为零),如果出错返回 FALSE

 

【七】模式修正符

模式修正符是标记在整个正则表达式之外的,可以看着是对正则表达式的一些补充说明

常用的模式修正符如下:

i          模式中的字符将同时匹配大小写字母

if (preg_match("/ABC/i", "abc",$match)) {        print_r($match);    }else{        print_r("匹配失败");    }

m       字符串视为多行

s        将字符串视为单行,换行符作为普通字符
x        将模式中的空白忽略
e        preg_replace() 函数在替换字符串中对逆向引用作正常的替换,将其作为 PHP 代码求值,并用其结果来替换所搜索的字符串。
A       强制仅从目标字符串的开头开始匹配
D       模式中的 $ 元字符仅匹配目标字符串的结尾
U       匹配最近的字符串
u       模式字符串被当成 UTF-8

 

【八】或者(分枝)

分枝是指制定几个规则,如果满足任意一种规则,则都当作匹配成功。具体来说就是用 | 符号把各种规则分开,且条件从左至右匹配。

提示:分枝规定,只要匹配成功,就不再对后面的条件加以匹配,所以如果你想匹配有包含关系的内容,请注意规则的顺序。

下面是一个使用分枝的例子。

美国的邮政编码的规则是 5 个数字或者 5 个数字连上 4 个数字,如 12345 或者 54321-1234 ,如果要匹配所有的邮编,则正确的正则表达式为:

\d{5}-\d{4}|\d{5}

 

【九】常用正则

邮箱,手机号,网址,自定义格式,采集器

 

【十】正则练习

(1)必须以start开始,以end结束,中间有一个或更多数字

(2)必须以end结束

$pattern = '/start\d+end$/';

(3)必须以start开始

$pattern = '/^start\d+end/';

(4)匹配非数字,即字母。以字母开始以字母结束(只能匹配一个)

$pattern = '/^[^0-9]$/';$string1 = "a";//匹配成功

(5)匹配非数字,即字母。以字母开始以字母结束(能匹配多个)

$pattern = '/^[^0-9]+$/';$string1 = "abc";//匹配成功

 

转载于:https://www.cnblogs.com/jianxian/p/8584750.html

你可能感兴趣的文章
Android工具HierarchyViewer 代码导读(1) -- 功能实现演示
查看>>
Java基础——多态
查看>>
python-Django与Nginx整合gunicorn模块
查看>>
Java--集合框架
查看>>
基础 - client可视区域
查看>>
JavaScript中正则表达式判断匹配规则以及常用的方法
查看>>
201571030334/201571030323实验三 软件工程结对项目
查看>>
BZOJ 1452: [JSOI2009]Count [二维树状数组]
查看>>
BZOJ 4276: [ONTAK2015]Bajtman i Okrągły Robin [线段树优化建边]
查看>>
BZOJ 3530: [Sdoi2014]数数 [AC自动机 数位DP]
查看>>
IDEA使用笔记(四)——工具栏的显示隐藏切换
查看>>
python中强大的list
查看>>
LeetCode Remove Invalid Parentheses
查看>>
thinkphp常用标签总结
查看>>
.net Core
查看>>
Mac 下安装wxpython踩过的坑
查看>>
05004_Linux的其他命令和权限命令
查看>>
00083_判断集合元素唯一的原理
查看>>
卷挂载/卸载工作流程
查看>>
.NET 配置项扩展
查看>>