13-匹配组

13.1 匹配组

你可以在表达式中使用圆括号来创建一个匹配组,匹配组中的内容将作为一个整体来看待。我们可以对一个匹配组使用量词,或是使用匹配组来限制选择符所能到达的范围。

只有圆括号才能形成匹配组。方括号是定义字符集,花括号是定义量词

13.2 创建捕获组

你也可以使用圆括号()创建一个以数字命名的捕获组。捕获组所匹配到的内容将被引擎保存起来。

例如表达式Set(Value)?可以匹配 Set 或者 SetValue。在第一种情况下,第一个(也是唯一的)捕获组是空的。第二种情况捕获组匹配 Value。

13.3 非捕获组

如果你不想让一个匹配组被捕获,你可以使用非捕获组,例如Set(?:Value)?。圆括号(后面的?:可以创建一个非捕获组。(后面的?和和表达末尾的?没有关系,末尾的问号是一个量词。你可能觉得问号同时具有两种语义可以会造成歧义,但实际上着两种语义不会发生冲突,因为作为量词的问号出现在(的后面是没有意义的,它不能修饰任何token,所以出现在(后面的问号只能是非匹配组的语法。

正则中还存在使用(?的其他类型的组,以后我们会提到。

支持具名匹配组的引擎通常支持把无名的匹配组设置为非捕获组。

13.4 使用捕获组所匹配到的字符

捕获组可以保存表达式中的部分匹配结果,并且通过回溯引用我们可以复用这些保存的结果。Backreference还可以在字符串替换中发挥作用。


如果文章出现错误,请给我提Issues - -
Github地址

需要进一步翻译的内容:

  • 具名匹配组
  • 字符串替换

原文

猜你喜欢

转载自blog.csdn.net/billll/article/details/85262312