捕获组()
把匹配到的东西存到组里,便于复用或使用|作为可选分支
使用()可以将括号内的字符作为一个整体,去匹配这个整体并捕获它(捕获后可使用"引用"来使组内字符其复用匹配)
例题
题目1
匹配以下所有的编程语言:Python、SQL、JavaScript、R
(注意匹配完整单词\b,否则会将R开头的单词也匹配进去)
题目2
从文本中提取所有动词: finding, matching, editing,并将它们作为捕获组的一部分返回。
(注意在表达式前后使用\b添加单词边界,限制匹配单词的开头与结尾;注意使用\w+而不是\w来匹配一个或多个字符,而不是ing前的一个字符)
题目3
使用捕获组找到并替换短语 “Regex or Regexp” 为 “Regex”。
(虽然以上写法可以正确匹配,但不符合正则表达式的一般逻辑习惯,可读性差,不利于维护)
更推荐使用(Regex) or Regexp
进行匹配,在替换时使用\1
引用组/123
正则表达式内拥有捕获组后,可使用/来复用每个捕获组(注意:每个捕获组从1开始排序,而不是0)
现有捕获组(a)(b)(c)
,其中,(a)为1号组,(b)为2号组,©为3号组
例题
现有文本 ha-ha,haa-haa 要求匹配所有字符(注意:第一组用 \1 来避免重复书写。在表达式的末尾键入 \2 以引用第二组。)
答案为(ha)-\1,(haa)-\2
非捕获组(?: )
非捕获组在捕获组的括号内添加:?
,使用了非捕获组后,该组将不会拥有组号,在使用引用组时也不会被视为可被选择的捕获组
样例
现有文本 ha-ha,haa-haa 要求将其全部匹配。
但如果使用(?:ha)-ha,(haa)-\1
来使(ha)
为非捕获组,那么在使用引用\1
时,该引用定位到的组则会是(haa)
而不是(?:ha)
参考网站:https://regexlearn.com/zh-cn