首先声明的是:绝对不是标题党!真的只需要五分钟!五分钟你就可以掌握最基本的正则表达式,并轻松写出一般的正则表达式,像电话,邮箱之类的。本文适合新手或者不怎么会正则表达式的同学,同时在此也明确告诉你看完此文你不会立马达到牛逼掉渣天的地步,但相信经过此文你应该能看懂大部分正则,并手写一般的正则是没有问题的。本文的主要目的是让你快速的掌握正则表达式的基础和基本使用。当然了如果您是个老铁欢迎指教,废话不多说,让我们开始吧。

什么是正则表达式(Regex)

正则表达式(Regular Expression),简称Regex,是描述文本的一种模式。其实就是规定了一些通配符从而到达匹配一段文本的能力
举个简单的例子,有如下一段文本:

A regular expression, or regex for short, is a pattern describing a certain amount of text. 

如果我想要找到其中的单词 “pattern” ,想想平时我们普通人正常的套路是,ctrl+f 使用查找功能,直接搜索 "pattern" 单词即可。
其实这里我们用来搜索的 “pattern” 就是一个正则表达式,此时是不是在想,卧槽这么太简单了?逗我呢?
事实真的就是这么简单!不信你可以找个在线正则表达式试试。当然了这也是最简单的一种。为什么说是最简单的呢?因为它是全字符匹配的,并没有使用到正则表达式中定义的一些特殊字符,个人理解为通配符,更形象易懂,有的地方也叫元字符。

匹配原理

简单说下正则表达式的执行过程,先匹配第一个字母p,如果匹配则继续匹配下一个字母a,依次类推,直到匹配到所有的字母。简单来说就是逐字符匹配。

元字符/通配符

上文我已经对一个正则表达式的使用有了一些基本的了解,但是我们不可能每次都去全字符匹配,那也太low了,再说了匹配个邮箱地址不可能穷举出所有的邮箱地址把。这个时候我们就需要用到正则表达式的通配符,顾名思义就是可以用规定的字符代替一系列字符。

  • . 除换行符外任意字符
  • \d 数字0-9 \D 非数字
  • \w 字母,数字,下划线 \W 非字母,数字,下划线
  • \s 空格,制表符,换行符 \S 非空格,制表符,换行符
  • ^ 字符串开始
  • $ 字符串结尾

以上只是列出来几个常用,其它可能需要随着读者不断实践再去学习了。

来个例子可能更直观一些:有个数字 9 ,我们如果想要匹配,正则表达式,简单粗暴的写法就是:9,用通配符就是:\d ,当然了你可以用 . 或者 \w 等,这也就是为什么匹配个东西为啥会有那么多种写法的原因了。不同的人可能写出来也不一样。
上面这个太简单了有木有,那么现在我要匹配 99 呢?当然正则表达式你依然可以直接写 99 ,我保证不打死你。做人得有追求不是,我们可以这么写正则:\d\d,当然了还可以使用其它通配符,可自行脑补。
但是但是,万一我们要匹配的是 99……99 包含n个9的字符串呢,不能手写n个 \d 进行匹配吧。

量词

答案就是量词,就是指定我们需要匹配的数量,以下就是基本的一些量词说明:

  • * 零次或多次
  • + 一次或多次
  • ?一次或零次
  • {n} n次
  • {n,} n次到无数次
  • {n,m} n次到m次

那上文的匹配n个9字符串的正则表达式就可以写成:\d+或者\d{1,}

转义字符

有时候我们所有匹配的文本里面有正则表达式的关键词(元字符或通配符),那么就需要使用转移字符 \ ,例如匹配 . 就需要写成 \.

看到这里是不是觉得很简单,那么我们就使用上面所介绍的内容,自己写出来一个匹配大部分邮件地址的正则表达式,如:\w+@\w+\.\w+
此正则表达式可以匹配如下格式的邮件地址: 多个字母或者数字或下划线 @ 多个字母或者数字或下划线 . 多个字母或者数字或下划线 ,比如:nuss@qq.com

字符集

当然了使用\w+@\w+\.\w+ 正则表达式只能匹配一部分的邮箱格式,比如邮箱里面带有 .或者-(减号),咱们写的这个就无法匹配了。这时候我们就发现通配符也不能代表所有字符的情况了,这时候我们就需要用字符集的概念了。
啥叫字符集呢? 就是[ ]括起来的内容就是字符集,可以匹配[ ]中的任意字符 ,也可以理解成我们可以自定义的通配符
比如有个邮箱:nuss.-666@qq.com
此时我们要匹配字母,数字,点,减号,内置的通配符肯定是无法达到我们的匹配要求了,此时我们就需要使用字符集自定义一个匹配规则:[\w\.-]+@\w+\.\w+
前面[\w\.-]+意思就是一个或多个匹配字母,数字,下划线,点(是特殊字符需要加\进行转义),减号,当然了我们也可以写的更直接点:[A-Za-z0-9_.-]+

结语

本文尽量使用简单通俗的语言来讲解了正则表达式的基本使用,并没有面面具到所有的语法,希望对你有所帮助,当然了正则表达式远远没有这么简单,比如分组,零宽断言等等,还有很多更高级的用法需要你去不断的探索和实践。以用促学快速掌握,然后再再去看详细的正则介绍将事半功倍。推荐《正则表达式30分钟入门教程》和文末的参考链接。同时在此也要提醒谨慎使用,用不好也会带来很严重的性能问题可观看此文进行了解《藏在正则表达式里的陷阱》

参考:

  • https://www.regular-expressions.info/tutorial.html

转载于:https://www.cnblogs.com/Nuss/p/9245884.html

5分钟正则表达式,了解一下!相关推荐

  1. 30分钟正则表达式指导

    很早就看过这篇文章了,很精典. 你是否曾经想过正则表达式是什么,怎样能够快速得到对它的一个基本的认识?我的目的就是在30分钟内带你入门并且对正则表达式有一个基本的理解.事实是正则表达式并没有它看起来那 ...

  2. 30分钟正则表达式入门

    入门 \b代表着单词的开头或结尾,也就是单词的分界处.虽然通常英文的单词是由空格或标点符号或换行来分隔的,但是\b并不匹配这些单词分隔符中的任何一个,它只匹配一个位置. 如果同时使用其它的一些元字符, ...

  3. (转)30分钟正则表达式入门

    原文地址:http://www.cnblogs.com/xiaohuzi1990/archive/2011/08/29/2157510.h 入门 \b代表着单词的开头或结尾,也就是单词的分界处.虽然通 ...

  4. 15分钟正则表达式快速上手(js)

    文章目录 1. 重点提炼 2. 字符串操作 3. 正则的匹配方法 3.1 字面量创建 3.2 构造函数创建 3.3 正则方法 => test .exce 3.4 字符串方法 => matc ...

  5. 30分钟正则表达式入门。

    http://deerchao.net/tutorials/regex/regex.htm http://www.popub.net/script/MSClass.html不间断滚动代码. http: ...

  6. php正则表达式替换,PHP正则表达式替换函数preg_replace

    preg_replace正则表达式替换函数对于我来说,现在非常喜欢它.不仅能准确.快速的处理字符串,还能让我从新审视正则表达式的重要性.正则表达式语言对于我来说,就像人类听不懂鸟语一样,想懂它却那么难 ...

  7. matlab去除大跳变,一种快速灰度校正算法(处理亮度不均等情况)(含MATLAB代码)...

    一种快速灰度校正算法(处理亮度不均等情况)(含MATLAB代码) 一种快速灰度校正算法(处理亮度不均等情况)(含MATLAB代码) 文章目录 前言 一.MATLAB代码 二.结果示例 总结 前言 方法 ...

  8. 找出符合规则为ABAB,ABCABC的QQ号码

    <?php /* ** 找出符合规则为ABAB,ABCABC的QQ号码* 正则反向引用* @link http://blog.csdn.net/lxcnn/article/details/447 ...

  9. 艾伟:正则表达式30分钟入门教程

    本文目标 30分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在自己的程序或网页里使用它. 如何使用本教程 最重要的是--请给我30分钟,如果你没有使用正则表达式的经验,请不要试图在3 ...

  10. 正则表达式30分钟教程

    来自WDDAVID'S BLOG的一篇学习正则表示的很不错的文章. 原文地址 正则表达式30分钟教程  本文目标 30分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在自己的程序或网页 ...

最新文章

  1. 谱聚类(Spectral clustering)(2):NCut
  2. PHPUnit实践二(生命周期)
  3. iOS 11开发教程(十六)iOS11应用视图之删除空白视图
  4. java阅读题_java 练习题带答案
  5. Python OS模块使用汇总
  6. Flex Socket 安全沙箱问题解决
  7. linux 文档属于apache,Apache 安装和使用文档
  8. 死锁(python 版)
  9. C# DataTable 和List之间相互转换的方法
  10. 线段树 B数据结构 牛客练习赛28
  11. 用Openswan组建Linux IPSec ---第二部分
  12. 网络大学计算机统考缺考,2020网络教育统考缺考后会有什么影响
  13. .Net IOC框架入门之一 Unity
  14. 万有引力的意思_从牛顿的苹果到牛顿的大炮:万有引力定律
  15. 【原】 OPenCV学习笔记1:imread()
  16. 全减器的原理与vhdl实现
  17. Linux卸载Anaconda
  18. element 日期选择器不能选择当天日期以后的日期
  19. python 代码库之遍历ttf字库编码和字符(含demo)
  20. QT Creator 应用程序*.exe文件打包发布详细教程【绿色便携形式 和 安装包形式】

热门文章

  1. vim编辑器设置行号、缩进、tab键
  2. codesys中打开linux端的串口_机械臂和移动机器人,CoDeSys介绍
  3. hibernate 的session一级缓存
  4. java用循环图形显示_请问如何在使用循环绘制图形时使每个图形的显示之间有一定的延迟时间?...
  5. Spring请求参数测试
  6. mybatis plugins_[Mybatis]-[基础支持层]-插件-多个插件执行顺序
  7. kafka的connect实现数据写入到kafka和从kafka写出
  8. 2.3谨慎活跃问题(Beware of Liveness Problems)
  9. SpringMVC实现list表单(六)
  10. 【渝粤教育】电大中专跨境电子商务理论与实务 (27)作业 题库