正则表达式(附匹配手机号和HTML标签)
介绍正则表达式
正则表达式: 又称规则表达式。计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl
中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix
中的工具软件(例如sed
和grep
)普及开的。正则表达式通常缩写成“regex
”,单数有regexp
、regex
,复数有regexps
、regexes
、regexen
。
语法
定界符
- 正则定界符就是用来声明正则表达式边界的符号,正则表达式是字符串类型。所以在定义正则表达是时先定义字符串类型
- 正则表达式常用的边界符
/
,实际上字母和数字字符以及\
之外的字符都可以做正则表达式的边界符使用 - 注意 : 一个完整的正则表达式准确的所有两个边界符。
- 第一个是字符串类型的引号边界符
- 第二个是正则表达式的边界符
原子
什么是原子
组成正则表达式的最小单位就是原子
原子由哪些内容组成
- 正常的字母都是原子,所有可见字符都是原子
- 大部分不可见字符也是原子,比如:
空格
、\n
、\r
、\t
原子 | 说明 |
---|---|
\d
|
表示数字 0~9 之间的任意一个字符。 |
\D
|
表示匹配除数字 0~9 之外的任意一个字符 |
\s
|
表示匹配空白字符,包括 空格 、\n 、\r 、\t 中的任意一个字符
|
\S(大写)
|
表示匹配除空白字符之外的任意一个字符 |
\w
|
表示匹配数字、大小写字母以及下划线中任意一个字符 |
\W(大写)
|
表示除了数字、大小写字母以及下划线中任意一个字符 |
[]原子列表
// 匹配1~5之间任意一个字符
$pattern = '/[12345]/';
// 连续的数字可以简写成
$pattern = '/[1-5]/';// 匹配 c~h 之间任意一个字符
$pattern = '/[cdefjh]/';
$pattern = '/[c-h]/';// 注意: 只有连续的才能这样写// 匹配除了 abc 之外的任意一个字符
$pattern = '/[^abc]/';
元字符(原子修饰符)
原子数量修饰符
字符 | 说明 |
---|---|
*
|
表示* 前面的原子可以出现 0次 1次 或者多次
|
+
|
表示+ 前面的原子可以出现 1次 或者多次
|
?
|
表示? 前面的原子可以出现 0次 或者 1次
|
{3}
|
表示{3} 前面的原子固定出现 3次
|
{2,}
|
表示{2,} 前面的原子 至少出现2次
|
{2,5}
|
表示{2,5} 前面的原子 最少出现2次,最多出现5次
|
字符串边界修饰符(开始和结束)
^
表示与指定字符开头的内容$
表示与指定字符结尾的内容^字符串$
表示精确匹配字符串,多一个少一个都不行
|
选择修饰符
$pattern = '/abc|def/'; // 匹配abc 或者 def$pattern = '/ab(c|d)ef/'; // 匹配 c 或者 d
模式单元
作用:
- 改变优先级
- 将多个原子视为一个原子
- 将匹配到的内容暂时存在内存当中,如果想解除存与内存中 可以使用 ?: 解除存储到内存的作用,以提高效率
- 可以将()的内容在函数的辅助下进行反向引用操作
// 要求: 让 markdown 这一整个字符串最少出现1次,最多出现3次 如:markdownmarkdownmarkdown$pattern = '/^markdown$/'; // 这种写法显然是不行的,只能出现一次// 这个时候可以使用 模式单元();
$pattern = '/^(markdown){1,3}$/';// 解除存储到内存的作用
$pattern = '/^(?:markdown){1,3}$/';
模式修正符
符号 | 作用 |
---|---|
i
|
不区分大小写 |
x
|
忽略正则中的空白 |
s
|
使用. 元字符可以匹配到\n 。 元字符. 可以匹配任意一个原子,处理\n
|
m
|
视为多行处理,在该模式下^ 和$ 可以匹配\n
|
S
|
加速匹配 |
U
|
改变贪婪模式 |
匹配域名的规则
分析:
可能出现的域名
http://www.baidu.com
https://www.baidu.cn
ftp://www.baidu.com
ftps://www.baidu.com
http://baidu.com
https://baidu.cn
https://www.hao123.com
https://www.hao123.com.cn
https://hks.cool
...先一步一步分析
1. 前面的协议 最少的3位,最多的5位也就是可以写成 '/^[a-z]{3,5}/'2. 看后面的 :// , 那么连起来就是
'/^[a-z]{3,5}:///'; 但是这样跟定界符冲突了,所有要加转译斜线 '/^[a-z]{3,5}:\/\//3. 再看后面的 ***. ***. ***. 这里的内容最少要出现一次所有可以写成 '/^[a-z]{3,5}:\/\/(?:[a-zA-Z0-9]+(-[a-zA-Z0-9]+)?\.)+/'4. 在看最后面的 可以写成'/^[a-z]{3,5}:\/\/(?:[a-zA-Z0-9]+(-[a-zA-Z0-9]+)?\.)+[a-z]{2,5}$/'
手机号正则匹配
分析:
手机号是11位 都是 1 开头的
可能出现的手机号
- 1 3 [0-9] 八位
- 1 4 7 八位
- 1 5 [0-9] 八位
- 1 6 8|9 八位
- 1 7 [0-9] 八位
- 1 8 [0-9] 八位
- 1 9 9 八位
$pattern = '/^1(?:(?:(?:3|5|7|8)[0-9])|47|6[89]|99)\d{8}$/'
使用正则清除HTML标签
/*** 清除HTMl标签* @param $str* @return string*/function pattern_func($str)
{
// $newStr = '';$search = '/<(.*?)>/';$newStr = preg_replace($search,'',$str);return $newStr;
}/*** 不解析HTML标签* @param $str* @return string|string[]|null*/
function pattern_replace($str)
{$search = array('/</','/>/');$pattern = array('<','>');return preg_replace($search,$pattern,$str);
}
正则表达式(附匹配手机号和HTML标签)相关推荐
- JS正则表达式匹配手机号
JS中常用正则表达式举例一 JS正则表达式匹配手机号 大家好,有关正则表达式的基本知识在其它文章中已做了介绍: JS属性&方法详解 下面一起来看看JS中利用正则表达式匹配字符串的常用例子: 手 ...
- Python学习:正则表达式匹配手机号,邮箱
匹配手机号 import re phoneRegex = re.compile(r'''((\d{3}|\(\d{3}\))? # area code(\s|-|.)? # separator(\d{ ...
- 正则表达式匹配手机号、QQ号、邮箱
import re #匹配邮箱 # def email_match(str1): # #12312313413@sdeqwe.com # res = re.findall(r"(\w{1,} ...
- php正则表达式检查匹配数字英文中文及手机号
1.检查输入字符串是否为数字.英文和中文混合 2.检查输入字符串是否为数字和英文.英文和中文.中文和数字等 3.检查输入字符串是否为纯数字.纯英文.纯中文 例: checkStr('中文yingwen ...
- 随手记一次用C#正则表达式获取下拉菜单html标签select以及相关属性值
随手记一次用C#正则表达式获取下拉菜单html标签<select>以及相关属性值 1:有如下html: .................. <select id="aaa ...
- 中文字符匹配java_java正则匹配HTML中a标签里的中文字符示例
java正则匹配HTML中a标签里的中文字符示例 发布于 2020-8-12| 复制链接 摘记: 本文实例讲述了java正则匹配HTML中a标签里的中文字符.分享给大家供大家参考,具体如下:今天群里一 ...
- linux绑定中文域名,linux shell正则表达式如何匹配域名(包含中文域名)
linux shell正则表达式如何匹配域名(包含中文) shell匹配域名 1. 匹配示例 最近的项目需要校验一下域名格式匹配,百度一下,说明如下: DNS规定,域名中的标号都由英文字母和数字组成, ...
- JavaScript正则表达式给html字符串的img标签增加style样式
平时我们使用正则表达式更多的是提取.过滤等,比如提取html字符串中的图片呀等等,而最近遇到的一个问题是要给html字符串中的img标签增加style样式,就想到了使用正则表达式,主要是对正则表达式的 ...
- JS 正则表达式否定匹配(正向前瞻)
引言 JS 正则表达式是 JS 学习过程中的一大难点,繁杂的匹配模式足以让人头大,不过其复杂性和其学习难度也赋予了它强大的功能.文章从 JS 正则表达式的正向前瞻说起,实现否定匹配的案例.本文适合有一 ...
最新文章
- linux创建用户并授予sudo权限
- easyui datagrid 返回数据正确 fit='true' 时不显示内容
- 全球及中国水牛奶市场销售份额与投资盈利前景分析报告2022版
- asp.net 使用my97 datepicker实现前后两个日期的范围界定
- package.json说明
- java 中间件_从头到尾说一遍Java(中间件)垃圾回收
- 关于php 调用接口 微信云支付 HmacSha256 加密 request_content 生成 authen_code
- php 把数字大写,php 阿拉伯数字转中文大写金额
- python中用来返回序列的最大函数_Python内置函数____________用来返回序列中的最大元素。...
- ENVI系列--遥感影像UTM投影计算公式
- VFP开发微信、支付宝扫码支付
- Windows-系统
- js 大数字单位处理 千、万、千万、亿....
- ONEXBBC 本地使用测试支付
- 基于YOLO目标检测及OpenCV实现的游戏代玩人工智能体(Auto Gaming Agent) [3] (更新)
- 基于FPGA的GV7600驱动
- Lawliet|编程学习基础
- 【财富空间】年终重磅:解密全球30家搅局者和355家上市路上的科技公司
- 读邹欣《师生关系》文章有感
- 集五福1 python
热门文章
- lineWithFocusChart(python - nvd3)
- AsyncHttpClient源码分析-基于Netty的连接池实现
- 程序员财富自由之路 自媒体篇 | 3000字干货分享
- Python正则表达式模式
- pymsql模块详解
- ctf 点击1000000次
- Project build error: Non-parseable POM D:\code\pom.xml: expected start tag name and not
- 【直播活动】阿里巴巴开源大家族加入中科院开源之夏2022
- 3dMax火离妖游戏模型过程
- 你的点子将去往何方,澌灭无闻,还是改变世界?