限定符

 

有时候不知道要匹配多少字符。为了能适应这种不确定性,正则表达式支持限定符的概念。这些限定符可以指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。

下表给出了各种限定符及其含义的说明:

字符 描述
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。 * 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{n,m} mn 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。刘, "o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

对一个很大的输入文档而言,章节数很轻易就超过九章,因此需要有一种方法来处理两位数或者三位数的章节号。限定符就提供了这个功能。下面的JScript 正则表达式可以匹配具有任何位数的章节标题:

/Chapter [1-9][0-9]*/

下面的 VBScript 正则表达式执行同样的匹配:

"Chapter [1-9][0-9]*"

请注意限定符出现在范围表达式之后。因此,它将应用于所包含的整个范围表达式,在本例中,只指定了从 0 到 9 的数字。

这里没有使用 '+' 限定符,因为第二位或后续位置上并不一定需要一个数字。同样也没有使用 '?' 字符,因为这将把章节数限制为只有两位数字。在 'Chapter' 和空格字符之后至少要匹配一个数字。

如果已知章节数限制只有99 章,则可以使用下面的 JScript 表达式来指定至少有一位数字,但不超过两个数字。

/Chapter [0-9]{1,2}/

对 VBScript 可以使用下述正则表达式:

"Chapter [0-9]{1,2}"

上述表达式的缺点是如果有一个章节号大于 99,它仍只会匹配前两位数字。另一个缺点是某些人可以创建一个 Chapter 0,而且仍能匹配。一个更好的用来匹配两位数的 JScript 表达式如下:

/Chapter [1-9][0-9]?/

或者

/Chapter [1-9][0-9]{0,1}/

对 VBScript 而言,下述表达式与上面等价:

"Chapter [1-9][0-9]?"

或者

"Chapter [1-9][0-9]{0,1}"

'*'、 '+'和 '?' 限定符都称之为贪婪的,也就是说,他们尽可能多地匹配文字。有时这根本就不是所希望发生的情况。有时则正好希望最小匹配。

例如,你可能要搜索一个 HTML 文档来查找一处包含在 H1 标记中的章节标题。在文档中该文字可能具有如下形式:

<H1>Chapter 1 – Introduction to Regular Expressions</H1>

下面的表达式匹配从开始的小于号 (<) 到 H1 标记结束处的大于号之间的所有内容。

/<.*>/

 VBScript 的正则表达式为:

"<.*>"

如果所要匹配的就是开始的 H1 标记,则下述非贪婪地表达式就只匹配 <H1>。

/<.*?>/

或者

"<.*?>"

通过在 '*'、 '+' 或 '?' 限定符后放置 '?',该表达式就从贪婪匹配转为了非贪婪或最小匹配。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索正则表达式
, 字符
, 表达式
, 前面
, 整数
, 一个
, 非负整数
限定
限定符 英文、通配符、android限定符、java限定符、限定词,以便于您获取更多的相关知识。

时间: 2024-10-03 00:06:50

限定符的相关文章

printf-求问:C语言 格式限定符类型的问题

问题描述 求问:C语言 格式限定符类型的问题 有时不小心错用了格式限定符,例如: int x; scanf("%f", &x); <----- 应该用%d printf("%g", x); <----- 应该用%d 而编译程序却编译通过了,没有发现错误,为什么? 解决方案 c语言中有强转这个东西,从这个角度也可以理解,c语言功能之所以强大,是因为限制很少,说白了,什么类型在内存中都是连续的01而已 解决方案二: 编译器不会检查这些的.这很正常.好

《叩响C#之门》正则表达式(二)数量限定符

第 20章 正则表达式 20.1 字符匹配 20.2 可选字符集 20.3 或匹配 20.4 数量限定符 20.5 贪婪和懒惰 20.6 定位符 20.7 分组和后向引用 20.8 替换文本 20.9 非捕获分组和预查 1.非捕获分组?: 2.正向预查?= 3.反向预查?<= 4.负正向预查?! 5.负反向预查?<! 6.注释# 20.10 正则表达式的类 20.11 正则表达式的选项 20.12 练习:验证用户输入

正则表达式教程之限定符和定位符

限定符 有时候不知道要匹配多少字符.为了能适应这种不确定性,正则表达式支持限定符的概念.这些限定符可以指定正则表达式的一个给定组件必须要出现多少次才能满足匹配. 下表给出了各种限定符及其含义的说明: 字符 描述 * 匹配前面的子表达式零次或多次.例如,zo* 能匹配 "z" 以及 "zoo". * 等价于{0,}. + 匹配前面的子表达式一次或多次.例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "

正则表达式简介(微软)--11.限定符

限定符有时候不知道要匹配多少字符.为了能适应这种不确定性,正则表达式支持限定符的概念.这些限定符可以指定正则表达式的一个给定组件必须要出现多少次才能满足匹配.下表给出了各种限定符及其含义的说明:字符 描述 * 匹配前面的子表达式零次或多次.例如,zo* 能匹配 "z" 以及 "zoo".* 等价于{0,}.+ 匹配前面的子表达式一次或多次.例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z&quo

c++-请教一下C++中的引用限定符的作用是什么?

问题描述 请教一下C++中的引用限定符的作用是什么? 并没有看懂C++primer上的解释.我这里说的引用限定符是成员函数的参数列表后加的&或&&,谢谢各位大神了. 解决方案 引用限定符就是限制调用成员函数的对象有引用限定&表示成员函数调用的对象需要是引用类型&&表示成员函数调用对象需要是右值引用.当不符合这些限定时,编译器会报错. 解决方案二: reference qualifier,我觉得翻译成引用修饰符更好参考:http://blog.csdn.net

c++-const限定符问题.

问题描述 const限定符问题. 3C #ifdef aconst b = a;#elseconst int b=1;#endif这段代码无法通过编译么 解决方案 我编译没有错误,应该和编译器有关,请问编译器告诉你是什么错误? 解决方案二: c++-const限定符const限定符c++ const 限定符 解决方案三: 第二句有错,缺少参数类型

volatile限定符{C}

PS: ...Newbie love coding-  Linux_c一站式编程(volatile限定符介绍) linux_c的volatile限定符 现在探讨一下编译器优化会对生成的指令产生什么影响,在此基础上介绍C语言的volatile限定符.看下面的例子: 我们用recv和send这两个全局变量来模拟设备寄存器.假设某种平台采用内存映射I/O,串口发送寄存器和串口接收寄存器位于固定的内存地址,而recv和send这两个全局变量也有固定的内存地址,所以在这个例子中把它们假想成串口接收寄存器和

背水一战 Windows 10 (9) - 资源: 资源限定符概述, 资源限定符示例

原文:背水一战 Windows 10 (9) - 资源: 资源限定符概述, 资源限定符示例 [源码下载] 背水一战 Windows 10 (9) - 资源: 资源限定符概述, 资源限定符示例 作者:webabcd 介绍背水一战 Windows 10 之 资源 资源限定符概述 资源限定符示例 示例1.资源限定符概述Resource/Qualifiers/Summary.xaml <Page x:Class="Windows10.Resource.Qualifiers.Summary"

sqlserver-新手求助!批量插入时去除文本限定符 replace处出错,弄了一整天弄不出来

问题描述 新手求助!批量插入时去除文本限定符 replace处出错,弄了一整天弄不出来 exec ('insert into xxdd (aa,bb,cc,dd,ee,ff) select replace(aa,'"',''),replace(bb,'"',''),replace(cc,'"',''),replace(dd,'"',''),replace(ee,'"',''),replace(ff,'"','') from openrowset(