捕获和分组

使用括号()进行分组和捕获


通过在圆括号或括号内放置正则表达式的一部分,可以将正则表达式的该部分组合在一起。这使我们可以将量词应用到整个组,或将替换限制为正则表达式的一部分。    

仅仅只有小括号()可用于分组。方括号定义了一个 字符类;量词使用了大括号{}并有特定的限制。  

括号创建编号的捕获组

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

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

非捕获组


如果不需要该组来捕获其匹配项,则可以将此正则表达式优化为Set(?:Value)?。左括号后的问号和冒号是创建非捕获组的语法。左括号后的问号与正则表达式末尾的问号无关。最后一个问号是使上一个标记成为可选项的量词。该量词不能在左括号后出现,因为在组开始时没有任何可选的内容。因此,这两个问号之间没有歧义。还有其他类型的组结合(?语法和冒号以外的其他字符,本教程后面将进行说明。    

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

支持命名捕获的正则表达式类型通常可以选择将所有未命名的组转换为非捕获组。   

使用捕获组匹配的文本


捕获组的出现使得提取部分正则表达式匹配的内容变得容易。我们可以通过反向引用重用正则表达式中捕获的文本。反向引用也可以在替换字符串中使用。     

查看笔记

扫码一下
查看教程更方便