正则表达式 运算符优先级与匹配规则 | 一看就懂!!!(四)

这篇具有很好参考价值的文章主要介绍了正则表达式 运算符优先级与匹配规则 | 一看就懂!!!(四)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、正则表达式 - 运算符优先级

(一)正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。

(二)相同优先级的从左到右进行运算,不同优先级的运算先高后低。

(三)下表从最高到最低说明了各种正则表达式运算符的优先级顺序:

 二、正则表达式 - 匹配规则

(一)基本模式匹配

1、一切从最基本的开始。模式,是正则表达式最基本的元素,它们是一组描述字符串特征的字符。

2、模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符、重复出现,或表示上下文。

3、例如:

(1)^符号用来匹配那些以给定模式开头的字符串。

(2)$ 符号用来匹配那些以给定模式结尾的字符串。

(3)字符 ^ 和 $ 同时使用时,表示精确匹配(字符串与模式一样)。

(4)如果一个模式不包括 ^ 和 $,那么它与任何包含该模式的字符串匹配。

(5)要检测一个字符串是否以制表符开头,可以用这个模式:

(二)字符簇

1、在 INTERNET 的程序中,正则表达式通常用来验证用户的输入。

2、当用户提交一个 FORM 以后,要判断输入的电话号码、地址、EMAIL 地址、信用卡号码等是否有效,用普通的基于字面的字符是不够的。

3、所以要用一种更自由的描述我们要的模式的办法,它就是字符簇。

4、要建立一个表示所有元音字符的字符簇,就把所有的元音字符放在一个方括号里:

5、用连字号可以表示一个字符的范围

 6、如果要匹配一个由一个小写字母和一位数字组成的字符串,比如 "z2"、"t6" 或 "g7",但不是 "ab2"、"r2d3" 或 "b52" 的话,用这个模式:

 7、当在一组方括号里使用 ^ 时,它表示"非"或"排除"的意思,常常用来剔除某个字符。

8、排除特定字符的例子:

9、HP的正则表达式有一些内置的通用字符簇,列表如下:

(三)确定重复出现

1、一个单词有若干个字母组成,一组数字有若干个单数组成。跟在字符或字符簇后面的花括号({})用来确定前面的内容的重复出现的次数。

2、 可以把模式扩展到更多的单词或数字:

3、特殊字符 ? 与 {0,1} 是相等的,它们都代表着: 0个或1个前面的内容 或 前面的内容是可选的 。

 4、特殊字符 * 与 {0,} 是相等的,它们都代表着 0 个或多个前面的内容 。

5、字符 + 与 {1,} 是相等的,表示 1 个或多个前面的内容


一、正则表达式 - 运算符优先级

(一)正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。

(二)相同优先级的从左到右进行运算,不同优先级的运算先高后低。

(三)下表从最高到最低说明了各种正则表达式运算符的优先级顺序:

运算符 描述
\ 转义符
(), (?:), (?=), [] 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, \任何元字符、任何字符 定位点和序列(即:位置和顺序)
| 替换,"或"操作
字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food"。若要匹配"mood"或"food",请使用括号创建子表达式,从而产生"(m|f)ood"。

 二、正则表达式 - 匹配规则

(一)基本模式匹配

1、一切从最基本的开始。模式,是正则表达式最基本的元素,它们是一组描述字符串特征的字符。

2、模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符、重复出现,或表示上下文。

3、例如:

(1)^符号用来匹配那些以给定模式开头的字符串。
^once

 这个模式包含一个特殊的字符 ^,表示该模式只匹配那些以 once 开头的字符串。

例如该模式与字符串 "once upon a time" 匹配,与 "There once was a man from NewYork" 不匹配。

(2)$ 符号用来匹配那些以给定模式结尾的字符串。
bucket$

 这个模式与 "Who kept all of this cash in a bucket" 匹配,与 "buckets" 不匹配。

(3)字符 ^ 和 $ 同时使用时,表示精确匹配(字符串与模式一样)。
^bucket$

 只匹配字符串 "bucket"

(4)如果一个模式不包括 ^ 和 $,那么它与任何包含该模式的字符串匹配。

例如:

once

 与字符串

There once was a man from NewYork
Who kept all of his cash in a bucket.

 是匹配的。

在该模式中的字母 (o-n-c-e) 是字面的字符,也就是说,他们表示该字母本身,数字也是一样的。其他一些稍微复杂的字符,如标点符号和白字符(空格、制表符等),要用到转义序列。所有的转义序列都用反斜杠 \ 打头。制表符的转义序列是 \t。

(5)要检测一个字符串是否以制表符开头,可以用这个模式:
^\t 

 类似的,用 \n 表示"新行",\r 表示回车。其他的特殊符号,可以用在前面加上反斜杠,如反斜杠本身用 \\ 表示,句号 . 用 \. 表示,以此类推。

(二)字符簇

1、在 INTERNET 的程序中,正则表达式通常用来验证用户的输入。

2、当用户提交一个 FORM 以后,要判断输入的电话号码、地址、EMAIL 地址、信用卡号码等是否有效,用普通的基于字面的字符是不够的。

3、所以要用一种更自由的描述我们要的模式的办法,它就是字符簇。

4、要建立一个表示所有元音字符的字符簇,就把所有的元音字符放在一个方括号里:

[AaEeIiOoUu]

 这个模式与任何元音字符匹配,但只能表示一个字符。

5、用连字号可以表示一个字符的范围

例如:

[a-z] // 匹配所有的小写字母 
[A-Z] // 匹配所有的大写字母 
[a-zA-Z] // 匹配所有的字母 
[0-9] // 匹配所有的数字 
[0-9\.\-] // 匹配所有的数字,句号和减号 
[ \f\r\t\n] // 匹配所有的白字符

 6、如果要匹配一个由一个小写字母和一位数字组成的字符串,比如 "z2"、"t6" 或 "g7",但不是 "ab2"、"r2d3" 或 "b52" 的话,用这个模式:

^[a-z][0-9]$

尽管 [a-z] 代表 26 个字母的范围,但在这里它只能与第一个字符是小写字母的字符串匹配。

 7、当在一组方括号里使用 ^ 时,它表示""或"排除"的意思,常常用来剔除某个字符。

^[^0-9][0-9]$

 这个模式与 "&5"、"g7"及"-2" 是匹配的,但与 "12"、"66" 是不匹配的。

8、排除特定字符的例子:

[^a-z] //除了小写字母以外的所有字符 
[^\\\/\^] //除了(\)(/)(^)之外的所有字符 
[^\"\'] //除了双引号(")和单引号(')之外的所有字符

 特殊字符 .(点,句号)在正则表达式中用来表示除了"新行"之外的所有字符。所以模式 ^.5$ 与任何两个字符的、以数字5结尾和以其他非"新行"字符开头的字符串匹配。模式 . 可以匹配任何字符串,换行符(\n、\r)除外

9、HP的正则表达式有一些内置的通用字符簇,列表如下:

字符簇 描述
[[:alpha:]] 任何字母
[[:digit:]] 任何数字
[[:alnum:]] 任何字母和数字
[[:space:]] 任何空白字符
[[:upper:]] 任何大写字母
[[:lower:]] 任何小写字母
[[:punct:]] 任何标点符号
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]

(三)确定重复出现

1、一个单词有若干个字母组成,一组数字有若干个单数组成。跟在字符或字符簇后面的花括号({})用来确定前面的内容的重复出现的次数。

字符簇 描述
^[a-zA-Z_]$ 所有的字母和下划线
^[[:alpha:]]{3}$ 所有的3个字母的单词
^a$ 字母a
^a{4}$ aaaa
^a{2,4}$ aa,aaa或aaaa
^a{1,3}$ a,aa或aaa
^a{2,}$ 包含多于两个a的字符串
^a{2,} 如:aardvark和aaab,但apple不行
a{2,} 如:baad和aaa,但Nantucket不行
\t{2} 两个制表符
.{2} 所有的两个字符

这些例子描述了花括号的三种不同的用法。一个数字 {x} 的意思是前面的字符或字符簇只出现x次 ;一个数字加逗号 {x,} 的意思是前面的内容出现x或更多的次数 ;两个数字用逗号分隔的数字 {x,y} 表示 前面的内容至少出现x次,但不超过y次

2、 可以把模式扩展到更多的单词或数字:

^[a-zA-Z0-9_]{1,}$      // 所有包含一个以上的字母、数字或下划线的字符串 
^[1-9][0-9]{0,}$        // 所有的正整数 
^\-{0,1}[0-9]{1,}$      // 所有的整数 
^[-]?[0-9]+\.?[0-9]+$   // 所有的浮点数

 最后一个例子表示:以一个可选的负号 ([-]?) 开头 (^)、跟着1个或更多的数字([0-9]+)、和一个小数点(\.)再跟上1个或多个数字([0-9]+),并且后面没有其他任何东西($)。

3、特殊字符 ? 与 {0,1} 是相等的,它们都代表着: 0个或1个前面的内容前面的内容是可选的

例如:

^\-?[0-9]{1,}\.?[0-9]{1,}$

 4、特殊字符 * 与 {0,} 是相等的,它们都代表着 0 个或多个前面的内容

5、字符 + 与 {1,} 是相等的,表示 1 个或多个前面的内容

所以上面的4个例子可以写成:文章来源地址https://www.toymoban.com/news/detail-520267.html

^[a-zA-Z0-9_]+$      // 所有包含一个以上的字母、数字或下划线的字符串 
^[1-9][0-9]*$        // 所有的正整数 
^\-?[0-9]+$          // 所有的整数 
^[-]?[0-9]+(\.[0-9]+)?$ // 所有的浮点数

到了这里,关于正则表达式 运算符优先级与匹配规则 | 一看就懂!!!(四)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 1.4. 运算符与表达式

    在 Java 中,运算符是用于执行特定操作的符号,而表达式是由变量、常量和运算符组成的一段代码,用于计算值。本节将介绍 Java 中的常用运算符和表达式的使用。 1.4.1. 算术运算符 Java 支持以下算术运算符: 加法( + ) 减法( - ) 乘法( * ) 除法( / ) 取模(求余数)(

    2024年02月06日
    浏览(61)
  • 运算符、表达式和内置对象

    一、实验目的 1.会使用IDLE编辑器编写简单数据类型; 2.掌握常量、变量的表示方式和简单操作; 3.掌握Python语言中基本的输入和输出方法; 4.掌握Python语言的各种运算符以及这些运算符的表达式; 5.掌握字符串类型的格式化方法; 6.能综合应用所学基础知识编写一些基本的程

    2024年02月07日
    浏览(65)
  • C++的运算符与表达式

    运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C++内置了丰富的运算符,并且提供了以下类型的运算符: 算数运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 在程序中,运算符是用来操作数据的,因此这些数据也被称为操作数,使用运算符将操

    2024年02月06日
    浏览(41)
  • JS基础-表达式和运算符

    表达式 :是由操作数和运算符(可选)构成的并产生运算结果的语法结构。例如:3+5 运算符 :进行计算或者逻辑运算的符号,比如表达式中的 + 号 表达式分类:算术、关系、逻辑、赋值、组合 以下符号都是算数运算符,运算符的就是运算 意义 运算符 加 + 减 - 乘

    2024年02月09日
    浏览(52)
  • Verilog常用运算符及表达式

    本文详细介绍了Verilog常用的运算符和表达式,特别是分享了处理“计算位宽溢出”和“负数”的可行方式,帮助读者更加轻松地理解和掌握Verilog语言的运算符。 算数运算符:加(+)、减(-)、乘(*)、除(/)、取余(%) 赋值运算符:非阻塞赋值(=)、阻塞赋值(=);

    2024年02月08日
    浏览(56)
  • js常用运算符和表达式

    JavaScript常用的运算符和表达式有: 用于执行基本的数学运算,包括加法(+)、减法(-)、乘法(*)、除法(/)、取余(%)等。 用于将值赋给变量,包括等号(=)、加等于(+=)、减等于(-=)、乘等于(*=)、除等于(/=)等。 用于比较两个值的大小或是否相等,包括等

    2024年02月09日
    浏览(46)
  • (77)TCL脚本命令【运算符(expr运算表达式)】

    1.1 TCL简介 1.2 TCL的起源与发展 1.3 TCL语言与库介绍 1.4 TCL运行环境 1.5 TCL脚本命令【运算符(expr运算表达式)】 1.6 结束语 Tcl 语言的全称 Tool Command Language,即工具命令语言。这种需要在 EDA 工具中使用的相当之多,或者说几乎每个 EDA 工具都支持 Tcl 语言。所以对于 IC 专业的

    2024年02月16日
    浏览(40)
  • C++学习之运算符与表达式

    基本的算数运算有加法、减法、乘法、除法和取模(求余数),对应的算数运算符分别为:+、-、*、/、%。至于用法,大家应该耳熟能详,这里不再过多赘述。 自增与自减运算符 运算符 说明 ++ 自增运算符,将数值增加一 - - 自减运算符,将数值减少一 该运算符主要有前置和

    2024年02月09日
    浏览(55)
  • 三、C#—变量,表达式,运算符(3)

    变量名能不能用汉字? 全局变量 局部变量 错误1 错误2 错误3 2.2.1 值类型直接存储值 例如: 2.2.2 简单类型 2.2.3 整数类型 例如: 2.2.4 浮点类型 2.2.5 decimal 类型 注意: 定义decimal变量时的问题 2.2.6 bool类型 2.3.1 引用类型存储对值得引用 2.3.2 Object 类 不区分大小写得限制 2.3.3

    2024年02月09日
    浏览(50)
  • 【python数据分析】运算符与表达式

    🙋‍ 哈喽大家好,本次是python数据分析、挖掘与可视化专栏第三期 ⭐本期内容:运算符与表达式 🏆系列专栏:Python数据分析、挖掘与可视化 👍保持开心,拒绝拖延,你想要的都会有,加油加油! 本期内容为python的运算符与表达式~ 参考书籍:《Python数据分析、挖掘与可视

    2024年02月03日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包