首页 > 其他分享 >正则表达式

正则表达式

时间:2024-11-23 09:34:30浏览次数:13  
标签:字符 匹配 数字 正则表达式 zA xx Z0

正则表达式 Regular Expression

和 语言无关、但大部分主流编程语言都兼容的 这种 处理 字符串的 表达式 。在 编程语言中, 通常 会将 正则表达式 简写为 regex 、 regexp 、 re

正则表达式 是对 字符串操作的 一种 扩展 和补充 。

正则表达式 可以 对 字符串 进行 检索提取替换 等操作。

正则 表达式 是由 一组 特殊 的 字符 组成的 模式匹配串 Pattern、本质上是一个字符串。在 Python 使用 Pattern 类 来表示正则表达式


RegexBuddy4.exe

这个软件 是 辅助学习 正则 匹配 规则 的软件。

正则匹配规则

基础规则

  • xyz : 匹配 字符串中的 xyz , 这里面的 xyz 是一个泛指,可以代表任意字符( 除特殊字符 )
  • [xyz] : 匹配 x , y , z 中的 任意 一个 字符

    - 在中括号中 有特殊含义 ,可以表示一个区间 ,且 区间 均包含 , 如果 - 无法 表示区间, 则 回复原意,用来匹配 -

[A-Z]  :  匹配 26个 大写字母 
[a-z]  :  匹配 26个 小写 字母 
[0-9]  :  匹配 任意一个 阿拉伯数字 字符
[0-]   :  匹配  0  或者  -  

[a-zA-Z0-9] : 匹配任意一个字母 或数字 字符 

[0-2457-9]   :  匹配 除 3 和 6 之外的 任意一个 数字 字符 
  • [^xyz] : 匹配 除 x, y, z 三个字符之外的 其他任意一个 字符

    ^ 作为在 中括号 的第一个字符时,代表 非的意思、出现在 中括号其他位置 均表示 ^

[^0-9]  :  匹配任意一个 非数字 字符
[0-9^]  :  匹配任意一个 数字字符 或者 ^   
  • \d : 匹配 任意一个数字字符、等价于 [0-9]

  • \D : 匹配 任意一个 非数字字符 、 等价于 [^0-9]

  • \w : 匹配 任意一个 单词(字母、数字、下划线)字符 , 等价于 [a-zA-Z0-9_] , 在 Python 中 \w 还能匹配 中文 字母

  • \W : 匹配 任意一个 非单词(字母、数字、下划线、中文字母)字符 和

  • \s : 匹配 任意一个 空白符 (空格、 制表符、换行符) 如果只匹配空格,可以直接写 空格、 制表符 \t , 换行符 \n

  • \S : 匹配 任意一个 非空白符

  • \b : 代表一个单词 边界、不能单独时候,需要配合其他正则使用

  • . : 匹配 除了 换行符 之外的 其他任意一个 字符

  • \. : 匹配一个小数点 、对特殊字符的匹配 可以使用 \ 进行转移

多字符匹配规则

X 代表 基础规则

  • X{n} : X 匹配 n 个
  • X{n,} : X 至少匹配 n 个, 尽可能多的匹配
  • X{n,m} : X 至少匹配 n 个 , 最多 匹配 m 个 , 要求 : m >= n
1[3-9]\d{9}   # 匹配一个手机号  

# 匹配一个邮箱   a)  有且只有一个 @符号 ,b) @符号前面的内容是 邮箱账号 , 账号由  字母、数字、下划线组成、长度 4-20
#  c) @符号后面的内容格式是 xx.xx  或者  xx.xx.xx   这里面的 xx 由 字母、数字、下划线组成 。 xx 的长度,长度 2 - 5
[a-zA-Z0-9_]{4,20}@[a-zA-Z0-9_]{2,5}(\.[a-zA-Z0-9_]{2,5}){1,2}             

贪婪式匹配规则

  • X* : X 至少匹配 0个 , 等价于 X{0,}
  • X+ : X 至少匹配 1个 , 等价于 X{1,}
  • X? : X 最多 匹配 1个 , 等价于 X{0,1}
# 匹配一个邮箱   a)  有且只有一个 @符号 ,b) @符号前面的内容是 邮箱账号 , 账号由  字母、数字、下划线组成. 
#  c) @符号后面的内容格式是 xx.xx  或者  xx.xx.xx   这里面的 xx 由 字母、数字、下划线组成 。 xx 的长度

[a-zA-Z0-9_]+@[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+){1,2} 

非贪婪式匹配规则

在 贪婪式匹配规则 的 后面 添加 一个 ? 形成非贪婪式匹配规则 。 非贪婪式 往往在使用的时候 不会出现在正则的尾部

如果 整个表达式 是一个 非贪婪式 , 那么 效果 和 贪婪式 是一样的

如果 非 贪婪式 前面 有表达式、 后面没有表达式 ,那么此时 非贪婪式 会 尽可能少的 匹配。

如果 非贪婪式 后面 有表达式 、后面表达式 会优先 匹配 内容,然后 前面符合要求的数据 均 交给 非贪婪式 匹配。

  • x*? : X 至少匹配 0个
  • X+? : X 至少匹配 1个
  • X?? : X 最多 匹配 1个
\d+?    :  匹配 多个数字组成 的内容, 表现和 贪婪式 相同 

3\d+?   :  匹配 3和 一个数字 、 此时 非贪婪式 尽可能少的 匹配 内容 

\d+?3   :  在 字符串中 找到 第一个 3 的位置, 3前面的多个数字(至少一个) 尽可能多的匹配 。 

分组 ( … )

在编写正则表达式的时候, 可以 使用 小括号 将 某一部分规则 括起来 形成一个 组 。

分组 后 , 每一组的 匹配的 数据 可以 更加方便地 进行 提取 。 组是一个整体。

  • 非捕获分组 (?: )

    使用了 ?: 的 组 就 不在 是 组了 , 而只是 一个 整体

    [a-zA-Z0-9_]+@[a-zA-Z0-9_]+(?:\.[a-zA-Z0-9_]+){1,2}
    
  • 命名捕获分组 (?P<name>)

    在 Python 中 使用 (?P<name>) , 在 Java 或者 Javascript中 使用 (?<name>)

    (?<account>[a-zA-Z0-9_]+)@[a-zA-Z0-9_]+(?:\.[a-zA-Z0-9_]+){1,2}
    
  • 分组 引用 \n : n 是组的编号、是一个数字

    \n 代表 引用 第 n 组 正则 匹配的内容 作为 匹配的内容 。


选择 |

编写 一个 身份证 正则表达式 ,用来 提取 年份 、月份、日 , 且 年份 必须在 1900  ~ 2099  ,  月份 01 ~ 12  , 天 01 ~ 31

[0-9]\d{5}(?P<year>(?:19|20)\d{2})(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}[0-9Xx]

限定符

限定符 一般 用来 做 数据校验

  • ^ : 如果 ^ 符号 出现在 正则表达式的 最前面, 代表 以 … 开头 。
  • $ : 如果 $ 符号 出现在 正则表达式的 尾部 , 代表 以 … 结尾
[\u4e00-\u9fa5]   #  匹配中文字符区间

断言(预测)

正则在前 ,断言在后 为 正向 断言。 否则为 反向 断言。

  • 正向确定断言 (?=)
\d+?(?=5)    #  匹配 数字 、且 数字 后面一定是 5
  • 正向否定断言 (?!) :
    \d+?(?!5)    #  匹配 数字 、且 数字 后面一定不是 5
    
  • 反向确定断言 (?<=)
    (?<=5)\d+    #  匹配 数字 且 数字 前面一定 是 5
    
  • 反向否定断言 (?<!)
    (?<!5)\d+    #  匹配 数字 且 数字 前面一定 不是 5
    

标签:字符,匹配,数字,正则表达式,zA,xx,Z0
From: https://blog.csdn.net/panpanpan233/article/details/143987202

相关文章

  • 第10章-Python正则表达式
    在日常生活中,经常会遇到访问一个新的网站时,只有注册成网站用户才能够登录使用。一个用户在填写注册信息时,通常会要求填写手机号、邮箱等信息,在填写信息的过程中网站会对填写的手机号、邮箱进行验证。那么这个验证的过程是如何实现的呢?其实原理很简单,就是使用正则表达式进行......
  • PHP 正则表达式 修正符【m s x e ? (?i)】内部修正符 贪婪模式 后向引用 断言【总结篇
    1.正则表达式修正符在PHP中,正则表达式中的修正符(modifier)可以改变模式的行为,使得其功能更加灵活。1.m修正符(多行模式)作用:在多行模式下,^和$元字符除了匹配整个字符串的开头和结尾外,还可以匹配每一行的开头和结尾。举例: "Hello\nWorld",当使用/^World/m时,^会匹配"W......
  • Python 正则表达式高级应用指南
    正则表达式是一种强大的文本模式匹配工具,在Python中,我们可以使用re模块来进行正则表达式的操作。以下是一些高级的正则表达式应用示例:复杂的模式匹配importretext="Hello,myemailisexample@example.comandmyphonenumberis123-456-7890."email_pattern=r'\b[......
  • Leetcode 10. 正则表达式匹配
    1.题目基本信息1.1.题目描述给你一个字符串s和一个字符规律p,请你来实现一个支持‘.’和‘*’的正则表达式匹配。‘.’匹配任意单个字符‘*’匹配零个或多个前面的那一个元素所谓匹配,是要涵盖整个字符串s的,而不是部分字符串。1.2.题目地址https://leetcode.c......
  • 正则表达式和三剑客
    image-20220403163240849什么是正则表达式正则表达式就是为了处理大量的字符串而定义的一套规则和方法。通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串。Linux正则表达式一般以行为单位处理的。image-20220405180916410如何用正则表达式通......
  • Web APIs 6:正则表达式
    WebAPIs6:正则表达式1.定义及使用场景用于匹配字符串中字符组合的模式,在JS中属于对象通常用来查找、替换哪些符合正则表达式的文本,不属于JS专属,许多语言都支持正则表达式使用场景:验证表单、过滤敏感词2.语法定义规则——>根据规则去查找定义规则:const变量名=/表......
  • 给Excel 添加正则表达式regexp()函数
    WPS推出了正则表达式函数regex家族,非常好用,必须给其点赞。听说微软在最新版本的Office也要推出,但老版本Office用户就不能使用这个函数,好在用VBA可以自定义一个函数也可以实现的,此函数不仅将三种模式融合到了同一个函数中,同时还支持数组、单元格、文本等多种数据处理'**************......
  • C++11新特性:正则表达式
    摘要本文介绍了正则表达式的基础概念,包括元字符、字符类、量词和锚点,展示了其在验证字符串、文本搜索、替换和数据提取中的应用。同时,详细讲解了C++11中正则表达式的使用示例,包括std::regex。正则表达式正则表达式(RegularExpressions)是一种强大的文本处理工具,它使用单个字符......
  • pyhton语法 正则表达式
    pyhton语法正则表达式1.正则表达式介绍1.1正则表达式入门1.2正则替换2.正则效验2.1正则-校验单个字符2.2正则-校验多个字符2.3正则-校验开头和结尾2.4正则-校验分组2.5正则校验邮箱2.6正则获取分组后的数据2.7引用指定组的内容总结1.正则表达式介绍1.1正......
  • NJU-ICS 2024学习随笔PA1_3(正则表达式)
    2024-09-22确实这一块比前面有点难了,先看看这make_token函数在哪。在nemu目录下执行指令grep-r"make_token",就可以得到这个函数所在路径。然后看到enum和rule,结合文章可知,这里就是添加规则的地方。先学一下正则表达式语法正则表达式语法.:匹配任意字符(除了换行符)*:匹配前......