`
xu_ch
  • 浏览: 22311 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

正则表达式 ?:

阅读更多
表达式
(?:ab)([a-z]*?)(?=df)来匹配77abcddf88,为何会得到:abcd。目的是不包含ab
(?:ab)([a-z]*?)(?=df)
?: 的确是非捕获组,但其含义是 不会在组中捕获 但会在匹配结果中出现
比如你这个正则,group[1]的值会是 cd
如果(ab)这样 group[1]的值是ab
但这两个匹配的结果是一样的 都是abcd
?=正声明,出现在右边即不被组捕获也不被结果捕获
? <=反向正声明 在左边 其他一样


2.这是一个比较抽象的概念,谈到相对位置,前或后,左或右,那就一定要有一个参照物的,这里所说的所在位置的左侧或右侧是对参照物而言的,并不是(? <=Exp)或(?=Exp)本身,我们可以把它所参照的位置理解为一个零宽度的位置或“缝隙”,下面举例说明吧
先从简单的开始,有两个字符串
str1 = "a123b "
str2 = "a123c123b "
有一个正则表达式:(? <=a)\d+(?=b)
这里的\d+是明确的,就是数字,它可以做为参照物,而(? <=a)在“缝隙”处加了一个限定条件,在它的左侧为a,这里的“缝隙”指的就是(? <=a)和\d+之间的“缝隙”,由(?=b)加了一个限定条件,在它的右侧为b,这里的“缝隙”指的就是\d+和(?=b)之间的“缝隙”,用它来匹配str1的结果是匹配成功,而匹配str2的结果是不成功,因为str2两组数字的两侧都不同时满足这两个条件

换成另一个正则表达式:(?=a)\d+(? <=b)
我们根本不用拿任何例子去试,从正则表达式本身就可以断定它匹配不到任何内容,因为它本身就是自相矛盾的,(?=a)附加的条件是在“缝隙”的右侧是a,而很明显这个式子里“缝隙”的右侧一定是数字才能匹配成功,(? <=b)同理

或者把以上的\d+直接写为123可能会更有组于你的理解


再来说下(?=ab)([a-z]*?)(?=df)这个表达式,如果用它来匹配77abcddf88字符串,也是可以匹配成功的,但匹配的结果是 abcd,因为(?=ab)要求它所参照的“缝隙”右侧为ab,这里只有77和ab之间的“缝隙”才满足条件,而(?=df)要求它所参照的“缝隙”右侧为df,这里只有cd和df之间的“缝隙”满足要求,所以匹配结果为abcd
而(? <=ab)([a-z]*?)(?=df)这个表达式,(? <=ab)要求缝隙的左侧为ab,这里只有ab和cd之间的“缝隙”满足要求,(?=df)同上,所以匹配结果为cd

比如字符串1234abcd:你用正则表达式(\d+)(\D+)匹配,$1的内容是1234,$2的内容是abcd;如果你用(?:\d+)(\D+)匹配,$1的内容是abcd,$2没有内容。也就是说(?:)内的匹配不进行记录。
(?:)这个括号是用来改变优先级的,没有记忆功能,不会映射到$1或者$n。
分享到:
评论

相关推荐

    vb正则表达式实例(正则表达式测试程序)

    在VB.NET中,正则表达式(Regular Expression)是一种强大的文本处理工具,它允许程序员通过模式匹配来处理字符串。这个“vb正则表达式实例”很可能是为了帮助开发者测试和理解正则表达式的工作原理而设计的一个应用...

    正则表达式大全.docx

    8. Unicode汉字范围:`/^[u4e00-u9fa5],{0,}$/` 和匹配中文字符的正则表达式:`[\u4e00-\u9fa5]` - 这两个正则表达式用于检测字符串中是否包含中文字符。 9. 匹配双字节字符:`[^\x00-\xff]` - 用于识别多字节字符...

    常用正则表达式大全.txt

    - 正则表达式:`^[0-9]*$` - 示例:`12345` 2. **指定长度数字**: - 只允许输入固定长度的数字(例如4位数字)。 - 正则表达式:`^\d{4}$` - 示例:`1234` - 允许输入至少n位数字。 - 正则表达式:`^\d{n,}...

    PB实现的正则表达式

    1. 创建正则表达式:定义你要匹配的模式,例如`^[\d]{3}-[\d]{4}$`用于匹配美国电话号码格式。 2. 编译模式:将正则表达式编译成一个可以执行的对象,以提高后续匹配的速度。 3. 执行匹配:使用编译后的对象在目标...

    正则表达式转换工具

    正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它用于匹配、查找、替换等操作,涉及字符串处理的各个领域。正则表达式转换工具是专门针对这一需求而设计的,它能帮助用户将输入的内容转换...

    正则表达式测试工具C#版(src)

    正则表达式是一种强大的文本处理工具,用于在字符串中进行模式匹配和搜索。在C#编程语言中,正则表达式被广泛应用于数据验证、文本提取、格式转换等多个场景。本项目提供了一个C#编写的正则表达式测试工具,包含完整...

    pb 使用正则表达式源码pbregexp

    标题中的“pb 使用正则表达式源码pbregexp”指的是在PowerBuilder(简称pb)环境中,利用名为“pbregexp”的正则表达式组件来实现源代码级别的正则表达式操作。PowerBuilder是一款流行的可视化的、面向对象的软件...

    正则表达式(Deelx版)|正则表达式(Deelx版)支持库

    正则表达式(Deelx版)是一种强大的文本处理工具,它允许程序员和用户通过预定义的模式来匹配、查找、替换或者分析字符串。Deelx版是专门为提高正则表达式性能和功能而设计的一个支持库,适用于各种编程语言和应用场景...

    VC、VC++,MFC 正则表达式类库

    正则表达式类库则为VC++和MFC的开发者提供了对正则表达式功能的支持。 "VC、VC++,MFC 正则表达式类库"指的是在MFC中实现或集成的正则表达式处理模块。这个库通常包含一系列的类和函数,允许程序员编写符合特定模式...

    正则表达式教程:30分钟让你精通正则表达式语法 _

    正则表达式教程:30分钟让你精通正则表达式语法 _

    c# 正则表达式生成工具 源代码

    在IT领域,正则表达式(Regular Expression)是一种强大的文本处理工具,用于匹配、查找、替换等操作。C#作为.NET框架的主要编程语言,提供了丰富的正则表达式API,使得开发者能够方便地处理复杂的字符串模式匹配...

    Java使用正则表达式提取XML节点内容的方法示例

    Java使用正则表达式提取XML节点内容的方法示例 Java使用正则表达式提取XML节点内容的方法示例主要介绍了Java使用正则表达式提取XML节点内容的方法,结合具体实例形式分析了java针对xml格式字符串的正则匹配相关操作...

    C语言正则表达式库

    C语言正则表达式库是用于在C编程环境中处理和匹配正则表达式的软件库。这个库名为PCRE(Perl Compatible Regular Expressions),正如其名,它与Perl语言中的正则表达式语法高度兼容,提供了丰富的功能和强大的匹配...

    正则表达式学习资料以及练习项目代码很多

    正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和替换等场景。在Python编程语言中,正则表达式提供了强大的文本处理能力,使得开发者能够高效地处理...

    使用正则表达式验证一年的12个月份

    正则表达式是一种强大的文本处理工具,用于匹配、查找、替换等操作,广泛应用于编程语言中。在IT行业中,正则表达式是处理字符串时不可或缺的一部分,尤其在数据验证、文本提取等方面。在这个场景中,我们需要创建一...

    正则表达式必知必会v_1.0.pdf

    "正则表达式必知必会" 正则表达式是一种强大的文本处理工具,广泛应用于各个领域。下面是对正则表达式的详细解释: 正则表达式的用途 正则表达式主要用于处理文本,提供了两大主要功能:查找和替换。查找功能允许...

    详解Java判断是否是整数,小数或实数的正则表达式

    在Java中使用正则表达式来判断字符串是否符合整数、小数或实数的格式是一种常见且有效的做法。在编程中,我们经常需要对输入的字符串进行格式验证,以确保它们符合预期的数值格式,尤其是在处理财务数据、用户输入...

    三目运算符+正则表达式

    例如,如果我们想验证一个字符串是否为有效的电子邮件地址,可以使用以下正则表达式: ```java String email = "example@example.com"; boolean isValid = email.matches("\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\....

    正则表达式大全 - 收集的最常用正则表达式

    正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串。它通过预定义的模式来识别和操作字符串中的数据。以下是一些常见的正则表达式及其用途: 1. 匹配中文字符:`[u4e00-u9fa5]` - 这个正则...

Global site tag (gtag.js) - Google Analytics