程序员必备知识 01 正则表达式

"本文详细介绍了正则表达式的基础知识,包括顺序重要性、特殊字符的转义、常用转义字符及其用途,如d、D、w、W等。还讲解了量词的概念,如*、+、?以及使用方法,并通过实例展示了如何匹配电话号码和邮箱地址。此外,文章还探讨了分组和实战练习,如邮箱和URL的正则匹配规则。"
摘要由CSDN通过智能技术生成

1.1 正则表达式


正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

我们许多的 程序语言,都是内置 正则表达式,对我们写的 代码进行 判断和处理的。

无论 您用 Python、JavaScript 或 Java ,正则表达式 都不是 它们的 独特标准,而是 具有 一个 很规范的 统一。学会 通用正则 才能 更好的 把它用于 这些 编程语言中。我们经常会用它 处理大量的字符串文本 和 命令行!

正则表达式 是略微复杂的,这也证明 正则 可以 帮你做很多事。(你能够想象?正则 几乎可以处理任何情况的文本吗?)


1.1.1 直奔主题

  1. 顺序很重要

当你 如数 ABC 和 BCA 的时候 匹配到的 完全就是两个东西,(当然 大小写字母是不会被区分的!)这属于 精准搜索。你输入的正则也必须 精准。
在这里插入图片描述

  1. 一些特殊字符 需要转义才能搜索

比如说:.[{()^$ | ?*+
在这里插入图片描述

当我们 只 输入一个 . 的时候。
你会发现 它做了一个比较 奇怪的操作,它会把 所有的 字符 都搜索出来,也就是说 对于 它来说,所有的 单个字符 都是 匹配的!
在这里插入图片描述
而当你 在特殊字符 前面 加一个 反斜杠的时候,它就只会 搜索 点 或 句点。(这就是转义字符)

  • 转义字符的魅力

\d : 搜索 0-9 的一个数字
\D : 不搜索 0-9 的一个数字
\w : 搜索 a-z、A-Z、0-9、_ 的一个字符(下划线)(不搜索特殊字符)
\W : 不搜索 a-z、A-Z、0-9、_ 的一个字符(下划线)(就搜索特殊字符)
\s : 搜索 space(空格)、tab(制表符)、newline(新的换行)的一个字符
\S : 不搜索 空格、制表符和换行符 的一个字符

!!下面的转义字符实际上不匹配 任何字符(所以它们被称为锚点)!!

  1. \b :针对词边界的搜索(\bHa 意思是 Ha词边界Ha 就只能搜到边界后面的Ha,而不能 搜索到 前面没有 词边界的 Ha
    词边界:就是 空格、换行符、制表符!
    在这里插入图片描述
  2. \B :不针对 词边界来搜索。(\BHa 它就只能 搜索到 前面没有空格、换行符、制表符 的 Ha
    在这里插入图片描述
  3. ^ : 针对于 一行字符串的开头 来进行搜索
    在这里插入图片描述
  4. $ : 针对于 一行字符串的结尾 来进行搜索的。
    在这里插入图片描述

实战: 匹配 分隔符为(- .)的电话号码

在这里插入图片描述
. 只能匹配 一个 任意字符

上述的方法其实可以很好的解决,但是我们会 遇到一个致命的问题。当我们 出现 并非 正确 分隔符的 电话号码时:

在这里插入图片描述
它居然也会 进行匹配!这要怎么办呢,我们只需要 匹配 分隔符是 . 或 - 的就可以了。

  1. [] :字符集符号,**意思是 只要出现了 [] 里面的一个字符,就会被匹配!! **
    正则格式:\d\d\d[.-]\d\d\d[.-]\d\d\d\d
    在这里插入图片描述
    [a-z]:就是 只要 碰到 a-z 其中一个字符 就匹配
    [0-9]:就是 只要 碰到 0-9 其中一个字符 就匹配
    所以 \d \w 这些 只是 对 [] 字节集 进行了封装而已呀。

[^]:意思是 非!就是不能匹配 那些 字符!!

[^a]:就是不能匹配 a 这个字符。在这里插入图片描述

[^a-z]:就是不能匹配 a-z 任意一个字符。。

  1. ():指的是 一组,就是 把一个 匹配的正则 包含起来,当成 一个整体 来处理!
    在这里插入图片描述

1.1.2 Quantifiers 量词

  1. * :匹配 0 次 或 多次(至少匹配0次
  2. + :匹配 1 次 或 多次(至少匹配1次
  3. ? :匹配 0 次 或 1次(该字符可有可无
  4. a{3}:匹配 a 字符 3次
  5. ==a{3,4}:最少匹配 a 字符 3次,最多匹配 4次 ==在这里插入图片描述
  6. () 和 | 的使用

() 可以处理我们 [] 处理不了的东西,这是因为 [] 只能匹配一个字符,而 () 却可以 把多个 正则匹配包括起来,形成一个 组!而不是 仅限于 一个 字符!!!

在这里插入图片描述
如果 学完了 以上所有的基础知识,那我们 就 可以 做一些 实战 练习了。


1.1.3 实战练习

  1. 邮箱判定

CoreyMSchafer@gamil.com
CoreyMSchafer@gamil.cao.com
corey.schafer@university.edu
cor.ey.schafer@university.edu
corey-321schafer@my-work.net
corey-321-schafer@my-work.net
99565687@qq.com

正则表达式:[\w\d]+[\.-]?[\w\d]+[\.-]?[\w\d]+@[\w\d]+(\.[\w\d]+(\.[\w\d]+)?|-[\w\d]+\.[\w\d]+)

在这里插入图片描述
2. URL判定

https://www.google.com
http://coreyms.com
https://youtube.com
https://www.nasa.gov
http://www.www.wwww.dsadasd.sdasdasd.com

正则表达式:https?://(w{3})?[\w\d\.]*\.[\w\d]+

在这里插入图片描述
分组的第二个好处是:只有 分组的 正则匹配,才能够 被直接 取出来 查看!! 编程语言 也都是 用 () 分组的 正则匹配 给你 响应的 正则 反馈的 !!

这个 你可以 在 Python 语言的 re 库里,深深的 感应到。

比如你想要直接 暴力的 取出 两个 文本 的中间文本!

左文本(.*?)右文本

.*? 是什么意思呢 ?

. 是匹配任意一个字符!* 是 让其变成匹配 0 个 或 多个 任意字符。? 是这些字符可有可无!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值