介绍正则表达式

正则表达式: 又称规则表达式。计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sedgrep)普及开的。正则表达式通常缩写成“regex”,单数有regexpregex,复数有regexpsregexesregexen

语法

定界符

  • 正则定界符就是用来声明正则表达式边界的符号,正则表达式是字符串类型。所以在定义正则表达是时先定义字符串类型
  • 正则表达式常用的边界符 / ,实际上字母和数字字符以及 \ 之外的字符都可以做正则表达式的边界符使用
  • 注意 : 一个完整的正则表达式准确的所有两个边界符。
    • 第一个是字符串类型的引号边界符
    • 第二个是正则表达式的边界符

原子

什么是原子

组成正则表达式的最小单位就是原子

原子由哪些内容组成

  • 正常的字母都是原子,所有可见字符都是原子
  • 大部分不可见字符也是原子,比如: 空格\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

模式单元

作用:

  1. 改变优先级
  2. 将多个原子视为一个原子
  3. 将匹配到的内容暂时存在内存当中,如果想解除存与内存中 可以使用 ?: 解除存储到内存的作用,以提高效率
  4. 可以将()的内容在函数的辅助下进行反向引用操作
// 要求: 让 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('&lt;','&gt;');return preg_replace($search,$pattern,$str);
}

正则表达式(附匹配手机号和HTML标签)相关推荐

  1. JS正则表达式匹配手机号

    JS中常用正则表达式举例一 JS正则表达式匹配手机号 大家好,有关正则表达式的基本知识在其它文章中已做了介绍: JS属性&方法详解 下面一起来看看JS中利用正则表达式匹配字符串的常用例子: 手 ...

  2. Python学习:正则表达式匹配手机号,邮箱

    匹配手机号 import re phoneRegex = re.compile(r'''((\d{3}|\(\d{3}\))? # area code(\s|-|.)? # separator(\d{ ...

  3. 正则表达式匹配手机号、QQ号、邮箱

    import re #匹配邮箱 # def email_match(str1): # #12312313413@sdeqwe.com # res = re.findall(r"(\w{1,} ...

  4. php正则表达式检查匹配数字英文中文及手机号

    1.检查输入字符串是否为数字.英文和中文混合 2.检查输入字符串是否为数字和英文.英文和中文.中文和数字等 3.检查输入字符串是否为纯数字.纯英文.纯中文 例: checkStr('中文yingwen ...

  5. 随手记一次用C#正则表达式获取下拉菜单html标签select以及相关属性值

    随手记一次用C#正则表达式获取下拉菜单html标签<select>以及相关属性值 1:有如下html: .................. <select id="aaa ...

  6. 中文字符匹配java_java正则匹配HTML中a标签里的中文字符示例

    java正则匹配HTML中a标签里的中文字符示例 发布于 2020-8-12| 复制链接 摘记: 本文实例讲述了java正则匹配HTML中a标签里的中文字符.分享给大家供大家参考,具体如下:今天群里一 ...

  7. linux绑定中文域名,linux shell正则表达式如何匹配域名(包含中文域名)

    linux shell正则表达式如何匹配域名(包含中文) shell匹配域名 1. 匹配示例 最近的项目需要校验一下域名格式匹配,百度一下,说明如下: DNS规定,域名中的标号都由英文字母和数字组成, ...

  8. JavaScript正则表达式给html字符串的img标签增加style样式

    平时我们使用正则表达式更多的是提取.过滤等,比如提取html字符串中的图片呀等等,而最近遇到的一个问题是要给html字符串中的img标签增加style样式,就想到了使用正则表达式,主要是对正则表达式的 ...

  9. JS 正则表达式否定匹配(正向前瞻)

    引言 JS 正则表达式是 JS 学习过程中的一大难点,繁杂的匹配模式足以让人头大,不过其复杂性和其学习难度也赋予了它强大的功能.文章从 JS 正则表达式的正向前瞻说起,实现否定匹配的案例.本文适合有一 ...

最新文章

  1. linux创建用户并授予sudo权限
  2. easyui datagrid 返回数据正确 fit='true' 时不显示内容
  3. 全球及中国水牛奶市场销售份额与投资盈利前景分析报告2022版
  4. asp.net 使用my97 datepicker实现前后两个日期的范围界定
  5. package.json说明
  6. java 中间件_从头到尾说一遍Java(中间件)垃圾回收
  7. 关于php 调用接口 微信云支付 HmacSha256 加密 request_content 生成 authen_code
  8. php 把数字大写,php 阿拉伯数字转中文大写金额
  9. python中用来返回序列的最大函数_Python内置函数____________用来返回序列中的最大元素。...
  10. ENVI系列--遥感影像UTM投影计算公式
  11. VFP开发微信、支付宝扫码支付
  12. Windows-系统
  13. js 大数字单位处理 千、万、千万、亿....
  14. ONEXBBC 本地使用测试支付
  15. 基于YOLO目标检测及OpenCV实现的游戏代玩人工智能体(Auto Gaming Agent) [3] (更新)
  16. 基于FPGA的GV7600驱动
  17. Lawliet|编程学习基础
  18. 【财富空间】年终重磅:解密全球30家搅局者和355家上市路上的科技公司
  19. 读邹欣《师生关系》文章有感
  20. 集五福1 python

热门文章

  1. lineWithFocusChart(python - nvd3)
  2. AsyncHttpClient源码分析-基于Netty的连接池实现
  3. 程序员财富自由之路 自媒体篇 | 3000字干货分享
  4. Python正则表达式模式
  5. pymsql模块详解
  6. ctf 点击1000000次
  7. Project build error: Non-parseable POM D:\code\pom.xml: expected start tag name and not
  8. 【直播活动】阿里巴巴开源大家族加入中科院开源之夏2022
  9. 3dMax火离妖游戏模型过程
  10. 你的点子将去往何方,澌灭无闻,还是改变世界?