Finding the Matching Text
Problem
You need to find the text that matched the RE.
Solution
Sometimes you need to know more than just whether an RE matched an
input string. In editors and many other tools, you will want to know
exactly what characters were matched. Remember that with multipliers
such as *
, the length of the text that was
matched may have no relationship to the length of the pattern that
matched it. Do not underestimate the mighty .*,
which will happily match thousands or millions of characters if
allowed to. As you can see from looking at the API, you can find out
whether a given match succeeds just by using match( ), as we’ve done up to now. But it may be more useful
to get a description of what it matched by using one of the
getParen( )
methods.
The notion of parentheses is central to RE processing. REs may be
nested to any level of complexity. The getParen( )
methods let you retrieve whatever matched at a given parenthesis
level. If you haven’t used any explicit parens, you can just
treat whatever matched as “level zero.” For example:
// Part of REmatch.java
String patt = "Q[^u]\\d+\\.";
RE r = new RE(patt);
String line = "Order QT300. Now!";
if (r.match(line)) {
System.out.println(patt + " matches '" +
r.getParen(0) +
"' in '" + line + "'"); Match whence = RE.match(patt, line);
}When run, this prints:
Q[^u]\d+\. matches "QT300." in "Order QT300. Now!"
It is also possible to get the starting and ending indexes and the length of the text that the pattern matched ...