我正在阅读有关正则表达式的 Oracle 教程。我在主题 Capturing groups 。虽然引用很好,但是除了括号代表一个组之外,我在理解这个主题时发现了很多困难。这是我的困惑。
- 在表达式中计算组的意义是什么?
- 什么是非捕获组?
用例子详细说明会很好。
最佳答案
- 人们通常不会数 组,只是想知道哪个组有哪个数字。例如。
([abc])([def](\d+))
有三个组,所以我知道将它们称为\1
、\2
和\3
。请注意,第 3 组在 2 中。它们从开始的左侧开始编号。 - 当使用正则表达式搜索以在字符串中查找内容时,与匹配相反,当您确保整个字符串与主题匹配时,第 0 组将为您提供匹配的字符串,但不是它之前或之后的内容。想象一下,如果您将一对括号括住整个正则表达式。它不是总数的一部分,因为它实际上不被视为一个组。
- 组可用于捕获以外的其他用途。例如。
(foo|bar)
将匹配"foo"
或"bar"
。如果您对组的内容不感兴趣,可以将其设为非捕获(例如:(?:foo|bar)
(因方言而异)),以免“使用up”分配给组的数字。但是您不必,只是有时候方便而已。 - 假设我想找到一个以同一个字母开头和结尾的单词:
\b([a-z])[a-z]*\1\b
\1
然后将与第一组捕获的内容相同。当然,它可以用于更强大的东西,但我想你会明白的。
(想出相关的例子当然是最难的部分。)
编辑:我回答的问题是:
- What is the significance of counting groups in an expression?
- There is a special group, called as group-0, which means the entire expression. It is not reported by groupCount() method. Why is that?
- I don't understand what are non-capturing groups?
- Why we need back-references? What is the significance of back-references?
关于java - 正则表达式 - 捕获组混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21686230/