无涯教程-Java 正则 - 捕获组

112 阅读1分钟

通过将要分组的字符放在一组括号内来创建它们。例如,正则表达式(Dog)创建一个包含字母“ d”,“ o”和“ g”的单个组。

捕获组通过从左到右计数其左括号进行编号。例如,在表达式(A)(B(C)中,存在四个这样的组-

  • ((A)(B(C)))
  • (A)
  • (B(C))
  • (C)

若要了解表达式中存在多少个组,请对Matcher对象调用groupCount方法。groupCount方法返回一个int,显示匹配器模式中存在的捕获组的数量。

还有一个特殊的组,组0,它始终表示整个表达式。此组不包括在groupCount报告的总数中。

Group 示例

以下示例说明如何从给定的字母数字字符串中查找数字字符串

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches { public static void main( String args[] ) { //要扫描的字符串以查找模式。 String line = "This order was placed for QT3000! OK?"; String pattern = "(.)(\d+)(.)";

  </span><span class="com">//创建Pattern对象</span><span class="pln">
  </span><span class="typ">Pattern</span><span class="pln"> r </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Pattern</span><span class="pun">.</span><span class="pln">compile</span><span class="pun">(</span><span class="pln">pattern</span><span class="pun">);</span><span class="pln">

  </span><span class="com">//创建匹配器对象。</span><span class="pln">
  </span><span class="typ">Matcher</span><span class="pln"> m </span><span class="pun">=</span><span class="pln"> r</span><span class="pun">.</span><span class="pln">matcher</span><span class="pun">(</span><span class="pln">line</span><span class="pun">);</span><span class="pln">
  
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">m</span><span class="pun">.</span><span class="pln">find</span><span class="pun">(</span><span class="pln"> </span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
     </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Found value: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> m</span><span class="pun">.</span><span class="kwd">group</span><span class="pun">(</span><span class="lit">0</span><span class="pun">)</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
     </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Found value: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> m</span><span class="pun">.</span><span class="kwd">group</span><span class="pun">(</span><span class="lit">1</span><span class="pun">)</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
     </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Found value: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> m</span><span class="pun">.</span><span class="kwd">group</span><span class="pun">(</span><span class="lit">2</span><span class="pun">)</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
     </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"NO MATCH"</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

} }

这将产生以下输出-

Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT300
Found value: 0

参考链接

www.learnfk.com/javaregex/j…