正则表达式-捕获组混乱

奔驰

我正在阅读有关正则表达式的Oracle教程。我的主题是“捕获组”尽管参考文献很好,但是除了括号代表一个组外,在理解该主题方面我发现很多困难。这是我的困惑。

  1. 对表达式中的组进行计数有什么意义?
  2. 什么是非捕获组?

详细举例说明会很好。

戴帽子的家伙

假设您有一个字符串,abcabc并且想弄清楚字符串的第一部分是否与第二部分匹配。您可以使用捕获组和反向引用对单个正则表达式执行此操作。这是我要使用的正则表达式:

(.+)\1

它的工作方式是.+匹配任何字符序列。因为是在括号中,它抓住了一组。\1st捕获组反向引用1,因此它等效于捕获组捕获的文本。进行一些回溯之后,捕获组将匹配字符串的第一部分abc\1现在,反向引用等于abc,因此它与字符串的后半部分匹配。现在整个字符串都已匹配,因此可以确认字符串的前半部分与后半部分匹配。


反向引用的另一个用途是替换。说你要更换所有{...}[...],如果里面的文字{}仅是个数字。您可以使用regex轻松捕获组和反向引用

{(\d+)}

并替换为[\1]

正则表达式{123}在字符串中进行匹配abc {123} 456,并123在第一个捕获组中捕获。反向引用\1现在是相当于123,因此替换{(\d+)}abc {123} 456[\1]的结果abc [123] 456


存在非捕获组的原因是,通常,组比捕获具有更多用途。正则表达式(xyz)+匹配完全由xyz重复的组组成的字符串,例如xyzxyzxyz需要一个组,因为xyz+仅匹配xy然后z重复,即xyzzzzz使用捕获组的问题是,与未捕获组相比,捕获组的效率稍低,并且占用索引。如果您有一个复杂的正则表达式,其中包含很多组,但是只需要在中间某个地方引用一个,则最好只引用\1而不是尝试将所有组累加到所需的组。

我希望这有帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

bash-打印正则表达式捕获的组

来自分类Dev

如何限制正则表达式捕获组?

来自分类Dev

Ruby正则表达式-仅gsub捕获的组

来自分类Dev

正则表达式可选捕获组?

来自分类Dev

正则表达式匹配短语并创建捕获组

来自分类Dev

复杂正则表达式与捕获组匹配

来自分类Dev

PHP正则表达式和相邻捕获组

来自分类Dev

正则表达式:捕获组?

来自分类Dev

正则表达式反向引用非捕获组?

来自分类Dev

正则表达式非捕获组-没用吗?

来自分类Dev

正则表达式非捕获组ins Scala

来自分类Dev

Unicode字符正则表达式,捕获组

来自分类Dev

正则表达式第二非捕获组?

来自分类Dev

Java正则表达式中捕获组的行为混乱

来自分类Dev

正则表达式在Visual Studio中捕获组

来自分类Dev

正则表达式匹配并比较捕获的组

来自分类Dev

正则表达式:捕获组中的捕获组

来自分类Dev

正则表达式替换忽略非捕获组

来自分类Dev

正则表达式捕获组快速

来自分类Dev

捕获所有适合正则表达式的组

来自分类Dev

正则表达式:基于先前捕获组的模式

来自分类Dev

重复正则表达式捕获组的捕获部分

来自分类Dev

正则表达式中捕获组的奇怪行为

来自分类Dev

在捕获的组正则表达式上修剪空间

来自分类Dev

C ++正则表达式捕获组混乱

来自分类Dev

正则表达式,捕获组

来自分类Dev

正则表达式捕获组

来自分类Dev

正则表达式:组或组

来自分类Dev

捕获组中的正则表达式捕获组