• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >正则表达式 > 正则表达式之捕获组/非捕获组介绍

正则表达式之捕获组/非捕获组介绍

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了正则表达式捕获组,正则表达式捕获,正则表达式 不捕获,正则表达式组,正则表达式平衡组等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
捕获组
语法:

字符 

描述

示例

(pattern)

匹配pattern并捕获结果,自动设置组号。

 (abc)+d

匹配abcd或者abcabcd

(?<name>pattern)

或

(?'name'pattern)

匹配pattern并捕获结果,设置name为组名。

 

\num

对捕获组的反向引用。其中 num 是一个正整数。

(\w)(\w)\2\1

匹配abba

\k< name >

或

\k' name '

对命名捕获组的反向引用。其中 name 是捕获组名。

(?<group>\w)abc\k<group>

匹配xabcx

使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个捕获组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。
例如:
(\d{4})-(\d{2}-(\d{2}))
1 1 2 3 32
以下是用程序处理捕获组的示例,对一个Url地址进行解析,并显示所有捕获组。
可以看到按顺序设置的捕获组号。
Regex.Match方法

也可以自己指定子表达式的组名。这样在表达式或程序中可以直接引用组名,当然也可以继续使用组号。但如果正则表达式中同时存在普通捕获组和命名捕获组,那么捕获组的编号就要特别注意,编号的规则是先对普通捕获组进行编号,再对命名捕获组进行编号。
例如:
(\d{4})-(?<date>\d{2}-(\d{2}))
1 1 3 2 23

下面在程序中处理命名捕获组,显示混合规则生成的组号,并利用捕获组的内容对源字符串进行替换。
可以看到先对普通捕获组进行编号,再对命名捕获组编号。
Regex.Replace方法


非捕获组
语法:

字符 

描述

示例

(?:pattern)

匹配pattern,但不捕获匹配结果。

'industr(?:y|ies)

匹配'industry'或'industries'。

(?=pattern)

零宽度正向预查,不捕获匹配结果。

'Windows (?=95|98|NT|2000)'

匹配 "Windows2000" 中的 "Windows"

不匹配 "Windows3.1" 中的 "Windows"。

(?!pattern)

零宽度负向预查,不捕获匹配结果。

'Windows (?!95|98|NT|2000)'

匹配 "Windows3.1" 中的 "Windows"

不匹配 "Windows2000" 中的 "Windows"。

(?<=pattern)

零宽度正向回查,不捕获匹配结果。

'2000 (?<=Office|Word|Excel)'

匹配 " Office2000" 中的 "2000"

不匹配 "Windows2000" 中的 "2000"。

(?<!pattern)

零宽度负向回查,不捕获匹配结果。

'2000 (?<!Office|Word|Excel)'

匹配 " Windows2000" 中的 "2000"

不匹配 " Office2000" 中的 "2000"。


非捕获组只匹配结果,但不捕获结果,也不会分配组号,当然也不能在表达式和程序中做进一步处理。
首先(?:pattern)与(pattern)不同之处只是在于不捕获结果。
接下来的四个非捕获组用于匹配pattern(或者不匹配pattern)位置之前(或之后)的内容。匹配的结果不包括pattern。
例如:
(?<=<(\w+)>).*(?=<\/\1>)匹配不包含属性的简单HTML标签内的内容。如:<div>hello</div>之中的hello,匹配结果不包括前缀<div>和后缀</div>。
下面是程序中非捕获组的示例,用来提取邮编。
可以看到反向回查和反向预查都没有被捕获。
Regex.Matches方法
class
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 除捕获组的语法外,其它的(?...)语法都不是捕获组的验证
  • 正则表达式——详细讲解平衡组
  • 正则表达式之捕获组/非捕获组介绍
  • 正则 捕获组(capture group)

相关文章

  • 2017-05-11文本框输入限制 [大全]
  • 2017-05-11javascript下一个还原html代码的正则
  • 2017-05-11编写高质量的js之正确理解正则表达式回溯
  • 2017-05-11Java正则表达式学习教程
  • 2017-05-11php获取超链接文本内容的正则表达式(五种方法)
  • 2017-05-11比较正宗的验证邮箱的正则表达式js代码详解
  • 2017-05-11移除HTML标签的正则表达式
  • 2017-05-11正则表达式教程之子表达式用法分析
  • 2017-05-11正则表达式.号元字符(除了回车符\r和换行符\n)
  • 2017-05-11正则表达式高级技巧及实例详解 笨活儿

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 用JS让文章内容指定的关键字加亮
    • javascript中匹配价格的正则表达式
    • 正则表达式解二元方程式代码
    • DW 查找某字符串前的所有字符的正则表达式
    • JScript中正则表达函数的说明与应用
    • 浅谈正则表达式(Regular Expression)
    • 教你轻松记住JS正则表达式
    • 学习正则表达式(js、C#)
    • eregi_replace()中特殊字符的处理方法
    • 除捕获组的语法外,其它的(?...)语法都不是捕获组的验证

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有