快速入门
教程
工具和语言
示例
参考
书籍评论
正则表达式教程
简介
目录
特殊字符
不可打印字符
正则表达式引擎内部
字符类
字符类减法
字符类交集
速记字符类
单词边界
交替
可选项目
重复
分组和捕获
反向引用
反向引用,第 2 部分
命名组
相对反向引用
分支重置组
自由间距和注释
Unicode
模式修饰符
原子分组
独占量词
前瞻和后顾
环视,第 2 部分
将文本排除在匹配之外
条件
平衡组
递归
子例程
无限递归
递归和量词
递归和捕获
递归和反向引用
递归和回溯
POSIX 方括号表达式
零长度匹配
继续匹配
本网站上的更多内容
简介
正则表达式快速入门
正则表达式教程
替换字符串教程
应用程序和语言
正则表达式示例
正则表达式参考
替换字符串参考
书籍评论
可打印 PDF
关于本网站
RSS 提要和博客
RegexBuddy—Better than a regular expression tutorial!

使用括号进行分组和捕获

通过将正则表达式的部分放在圆括号或括号中,你可以将正则表达式的该部分分组在一起。这允许你对整个组应用量词,或将交替限制在正则表达式的部分。

只有括号可用于分组。方括号定义字符类,而大括号由具有特定限制的量词使用。

括号创建编号捕获组

除了将正则表达式的部分组合在一起,括号还创建了一个编号的捕获组。它存储括号内正则表达式部分匹配的字符串部分。

正则表达式 Set(Value)? 匹配 SetSetValue。在第一种情况下,第一个(也是唯一一个)捕获组保持为空。在第二种情况下,第一个捕获组匹配 Value

非捕获组

如果你不需要组捕获其匹配项,则可以将此正则表达式优化为 Set(?:Value)?。问号和开括号后的冒号是创建非捕获组的语法。开括号后的问号与正则表达式末尾的问号无关。最后的问号是量词,它使前一个标记可选。此量词不能出现在开括号后,因为在组的开头没有需要使其可选的内容。因此,即使这可能一开始会令人困惑,问号作为使标记可选的运算符和问号作为非捕获组语法的部分之间也没有歧义。还有其他类型的组使用 (? 语法与冒号以外的其他字符结合,本教程后面将对此进行解释。

color=(?:red|green|blue) 是另一个带有非捕获组的正则表达式。此正则表达式没有量词。

支持命名捕获的正则表达式风格通常有一个选项,可将所有未命名组转换为非捕获组。

使用捕获组匹配的文本

捕获组可以轻松提取正则表达式匹配的一部分。你可以通过反向引用在正则表达式中重用文本。反向引用也可以在替换字符串中使用。有关详细信息,请查看替换文本教程