`

java正则表达式捕获组,非捕获组与注释介绍

阅读更多
正则表达式,简单部分可参加Pattern的javadoc介绍.
现在我来介绍一下捕获组,非捕获组.
注意:由于论坛发帖限制,表格中出现或的,请一律考虑成|字符
捕获组
字符描述示例
(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

也可以自己指定子表达式的组名。这样在表达式或程序中可以直接引用组名,当然也可以继续使用组号。但如果正则表达式中同时存在普通捕获组和命名捕获组,那么捕获组的编号就要特别注意,编号的规则是先对普通捕获组进行编号,再对命名捕获组进行编号。

例如:

(\d{4})-(?<date>\d{2}-(\d{2}))

1    1 3             2      23


非捕获组
字符 描述示例
(?: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>。
注释
字符描述示例
(?#comment)comment是注释,不对正则表达式的处理产生任何影响2[0-4]\d(?#200-249)或25[0-5](?#250-255或1?\d\d?(?#0-199)匹配0-255的整数
分享到:
评论

相关推荐

    Python正则表达式基础

    非捕获组和命名组提供了匹配但不捕获子模式的能力,这对于处理复杂的正则表达式和提高执行效率很有帮助。前向断言则允许在匹配之前进行检查,确保符合某个条件。 字符串的修改包括分割和替换两个方面。利用正则...

    正则表达式(Word)

    平衡组是指在正则表达式中使用特殊的符号来指定匹配的平衡组。例如,(?&lt;name&gt;pattern) 代表命名的捕获组。 16. 注释 注释是指在正则表达式中使用特殊的符号来指定注释的内容。例如,(?#comment) 代表注释的内容。 ...

    java \javascript 正则表达式

    在Java中,正则表达式通常与`java.util.regex`包中的类一起使用,如`Pattern`和`Matcher`。`Pattern`类用于编译正则表达式,并创建一个模式对象。`Matcher`类则用于在特定输入字符串上应用这个模式,进行匹配和查找...

    JAVA正则表达式详解

    对于初学者而言,掌握Java中的正则表达式是非常重要的技能之一,本文将详细介绍Java正则表达式的基本概念、常用语法以及应用场景。 #### 一、Java正则表达式基础 Java正则表达式是通过`java.util.regex`包来支持的...

    Python基础入门知识之正则表达式学习 正则表达式30分钟入门教程 共21页.pdf

    正则表达式是编程语言中用于模式匹配的强大工具,尤其在数据处理和文本搜索替换时极为有用。Python作为一门广泛使用的编程语言,内置了强大的正则表达式支持。本教程旨在帮助初学者在30分钟内对Python中的正则表达式...

    Java正则表达式入门

    通过以上介绍,我们可以了解到Java正则表达式的强大功能以及其基本使用方式。这些基础知识对于日常开发中的文本处理任务非常有用。在实际项目中,可以根据具体需求灵活运用这些元字符和语法结构,实现更为复杂的文本...

    Python正则表达式操作指南%2B-%2BUbuntu中文.pdf

    - 使用圆括号`()`创建捕获组,可以在正则表达式中对子模式进行分组。 - 捕获组可以用索引来引用,如`\1`, `\2`等。 - **无捕获组和命名组**: - `(?:...)`: 定义一个非捕获组,即不会保存匹配结果。 - `(?P&lt;name&gt;...

    python正则表达式使用指南

    - **不用 re.VERBOSE**:`re.VERBOSE`标志允许在正则表达式中添加注释和空格,提高可读性。 这篇指南覆盖了正则表达式的基础到进阶知识,对于想要在Python中使用正则表达式的人来说,是一个非常有价值的资源。通过...

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

    9. **代码解释和示例**:源代码可能包含了一些示例代码和注释,说明了如何使用正则表达式进行匹配、替换等操作,以及如何结合C#的其他特性,如LINQ,来处理匹配结果。 10. **错误处理和性能优化**:正则表达式有时...

    正则表达式袖珍手册

    #### 一、正则表达式与模式匹配简介 **正则表达式**(Regular Expression),简称regex或regexp,是一种强大的文本处理工具,它允许开发者通过简单的语句来匹配字符串中的特定模式。这种模式可以是单一的字符,也...

    java正则表达式: regular expression(一)

    Java正则表达式是编程语言Java中的一个强大工具,它用于处理字符串的模式匹配和文本检索替换。在本文中,我们将深入探讨Java正则表达式的概念、语法以及如何在实际项目中应用它们。 正则表达式(Regular Expression...

    正则表达式简明参考.pdf

    正则表达式是一种用于匹配字符串...以上知识点总结了正则表达式的核心用法,包括元字符、字符转义、字符类、反义、分支、分组、反向引用、零宽断言、贪婪与懒惰以及处理选项等,为熟练使用正则表达式提供了基本的指导。

    正则表达式+xml

    正则表达式(Regular Expression)和XML(eXtensible Markup Language)是IT领域中两种重要的技术。正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和验证字符串模式。XML则是一种用于存储和交换结构化...

    [Python]网络爬虫(七):Python中的正则表达式教程.pdf

    - `re.X` (VERBOSE):允许正则表达式中加入空白和注释。 4. 正则表达式的基础语法 - `.`:匹配任意单个字符。 - `*`:匹配前面的子表达式零次或多次。 - `+`:匹配前面的子表达式一次或多次。 - `?`:匹配前面...

    获取网页表格数据 正则表达式

    **HTML解析与正则表达式** 在大多数情况下,直接使用正则表达式处理HTML可能并不理想,因为HTML的复杂性和嵌套结构可能导致匹配错误。但如果我们知道数据格式相对简单,可以尝试这种方法。例如,如果表格结构非常...

Global site tag (gtag.js) - Google Analytics