java - 正则表达式 - 捕获组混淆

标签 java regex

我正在阅读有关正则表达式的 Oracle 教程。我在主题 Capturing groups 。虽然引用很好,但是除了括号代表一个组之外,我在理解这个主题时发现了很多困难。这是我的困惑。

  1. 在表达式中计算组的意义是什么?
  2. 什么是非捕获组?

用例子详细说明会很好。

最佳答案

  1. 人们通常不会 组,只是想知道哪个组有哪个数字。例如。 ([abc])([def](\d+)) 有三个组,所以我知道将它们称为 \1\2\3。请注意,第 3 组 2 中。它们从开始的左侧开始编号。
  2. 当使用正则表达式搜索以在字符串中查找内容时,与匹配相反,当您确保整个字符串与主题匹配时,第 0 组将为您提供匹配的字符串,但不是它之前或之后的内容。想象一下,如果您将一对括号括住整个正则表达式。它不是总数的一部分,因为它实际上不被视为一个组。
  3. 组可用于捕获以外的其他用途。例如。 (foo|bar) 将匹配 "foo" "bar"。如果您对组的内容不感兴趣,可以将其设为非捕获(例如:(?:foo|bar)(因方言而异)),以免“使用up”分配给组的数字。但是您不必,只是有时候方便而已。
  4. 假设我想找到一个以同一个字母开头和结尾的单词:\b([a-z])[a-z]*\1\b \1 然后将与第一组捕获的内容相同。当然,它可以用于更强大的东西,但我想你会明白的。

(想出相关的例子当然是最难的部分。)

编辑:我回答的问题是:

  1. What is the significance of counting groups in an expression?
  2. There is a special group, called as group-0, which means the entire expression. It is not reported by groupCount() method. Why is that?
  3. I don't understand what are non-capturing groups?
  4. Why we need back-references? What is the significance of back-references?

关于java - 正则表达式 - 捕获组混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21686230/

相关文章:

javascript - 正则表达式仅允许整数和小数,不需要精度

java - 如何使用 Java 运行 DB2 复合 SQL 语句

java - Hibernate异常: java. lang.ClassNotFoundException : oracle. jdbc.OracleDriver

r - R中的后缀到前缀和前缀到后缀

java - Java正则表达式需要新鲜的眼光,这太贪婪了

regex - Powershell 正则表达式问题。转义括号

java - java算法是用C实现的还是用java实现的?

java - 在 Java 11 HttpClient 中如何解决受限 header 名称 : Date

java - AXIS Web 服务中的 URL

javascript - 不允许数字 (0-9) - javascript 中的正则表达式