Java/Regular Expressions/Group
Содержание
- 1 Capturing Text in a Group in a Regular Expression
- 2 Find group number 1 of the second find
- 3 find the starting point of the first subgroup
- 4 Find the starting point of the second subgroup
- 5 Getting the Indices of a Matching Group in a Regular Expression
- 6 Matcher.group(int) Method Example
- 7 Using a Non-Capturing Group in a Regular Expression
- 8 Using appendReplacement with Subgroup Replacements
- 9 Using the Captured Text of a Group within a Pattern
- 10 Using the Captured Text of a Group within a Replacement Pattern
- 11 Working with Groups: characters and digits
- 12 Working with Subgroups
Capturing Text in a Group in a Regular Expression
<source lang="java">
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main {
public static void main(String[] argv) throws Exception { CharSequence inputStr = "abbabcd"; String patternStr = "(a(b*))+(c*)"; // Compile and use regular expression Pattern pattern = Pattern.rupile(patternStr); Matcher matcher = pattern.matcher(inputStr); boolean matchFound = matcher.find(); if (matchFound) { // Get all groups for this match for (int i = 0; i <= matcher.groupCount(); i++) { String groupStr = matcher.group(i); } } }
}
</source>
Find group number 1 of the second find
<source lang="java">
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main {
public static void main(String[] argv) throws Exception { Pattern p = Pattern.rupile("t(est)"); String candidateString = "This is a test. This is a test."; Matcher matcher = p.matcher(candidateString); matcher.find(); String group_0 = matcher.group(0); String group_1 = matcher.group(1); System.out.println("Group 0 " + group_0); System.out.println("Group 1 " + group_1); }
}
</source>
find the starting point of the first subgroup
<source lang="java">
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main {
public static void main(String args[]) { Pattern p = Pattern.rupile("t(est)"); String candidateString = "This is a test. This is another test."; Matcher matcher = p.matcher(candidateString); int nextIndex = matcher.start(1); System.out.println(candidateString); System.out.println(nextIndex); }
}
</source>
Find the starting point of the second subgroup
<source lang="java">
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main {
public static void main(String args[]) { Pattern p = Pattern.rupile("t(est)"); String candidateString = "This is a test. This is another test."; Matcher matcher = p.matcher(candidateString); matcher.find(); int startIndex = matcher.start(0); System.out.println(candidateString); System.out.println(startIndex); }
}
</source>
Getting the Indices of a Matching Group in a Regular Expression
<source lang="java">
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main {
public static void main(String[] argv) throws Exception { CharSequence inputStr = "abbabcd"; String patternStr = "(a(b*))+(c*)"; Pattern pattern = Pattern.rupile(patternStr); Matcher matcher = pattern.matcher(inputStr); boolean matchFound = matcher.find(); if (matchFound) { // Get all groups for this match for (int i = 0; i <= matcher.groupCount(); i++) { // Get the group"s captured text String groupStr = matcher.group(i); // Get the group"s indices int groupStart = matcher.start(i); int groupEnd = matcher.end(i); // groupStr is equivalent to inputStr.subSequence(groupStart, groupEnd); } } }
}
</source>
Matcher.group(int) Method Example
<source lang="java">
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main {
public static void main(String args[]) { Pattern p = Pattern.rupile("t(est)"); String candidateString = "This is a test. This is another test."; Matcher matcher = p.matcher(candidateString); // Find group number 0 of the first find matcher.find(); String group_0 = matcher.group(0); String group_1 = matcher.group(1); System.out.println("Group 0 " + group_0); System.out.println("Group 1 " + group_1); System.out.println(candidateString); }
}
</source>
Using a Non-Capturing Group in a Regular Expression
<source lang="java">
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main {
public static void main(String[] argv) throws Exception { String inputStr = "abbabcd"; String patternStr = "(a(?:b*))+(c*)"; // (?:b*) is a non-capturing group Pattern pattern = Pattern.rupile(patternStr); Matcher matcher = pattern.matcher(inputStr); boolean matchFound = matcher.find(); if (matchFound) { for (int i = 0; i <= matcher.groupCount(); i++) { String groupStr = matcher.group(i); } } }
}
</source>
Using appendReplacement with Subgroup Replacements
<source lang="java">
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main {
public static void main(String args[]) { Pattern p = Pattern.rupile("(another) (test)"); StringBuffer sb = new StringBuffer(); String candidateString = "This is another test."; String replacement = "$1 AAA $2"; Matcher matcher = p.matcher(candidateString); matcher.find(); matcher.appendReplacement(sb, replacement); String msg = sb.toString(); System.out.println(msg); }
}
</source>
Using the Captured Text of a Group within a Pattern
<source lang="java">
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main {
public static void main(String[] argv) throws Exception { String patternStr = "<(\\S+?).*?>(.*?)</\\1>"; Pattern pattern = Pattern.rupile(patternStr); Matcher matcher = pattern.matcher(""); // Set the input matcher.reset("xx <tag a=b> yy </tag> zz"); // Get tagname and contents of tag boolean matchFound = matcher.find(); String tagname = matcher.group(1); String contents = matcher.group(2); matcher.reset("xx <tag> yy </tag0>"); matchFound = matcher.find(); }
}
</source>
Using the Captured Text of a Group within a Replacement Pattern
<source lang="java">
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main {
public static void main(String[] argv) throws Exception { String patternStr = "\\((\\w+)\\)"; String replaceStr = "<$1>"; Pattern pattern = Pattern.rupile(patternStr); CharSequence inputStr = "a (b c) d (ef) g"; Matcher matcher = pattern.matcher(inputStr); String output = matcher.replaceAll(replaceStr); }
}
</source>
Working with Groups: characters and digits
<source lang="java">
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main {
public static void main(String args[]) { Pattern p = Pattern.rupile("\\w\\d"); String candidate = "AAA C1 "; Matcher matcher = p.matcher(candidate); if (matcher.find()) { String tmp = matcher.group(0); System.out.println(tmp); } }
}
</source>
Working with Subgroups
<source lang="java">
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main {
public static void main(String args[]) { Pattern p = Pattern.rupile("\\w(\\d)"); String candidate = "w5 "; Matcher matcher = p.matcher(candidate); if (matcher.find()) { String tmp = matcher.group(0); System.out.println(tmp); tmp = matcher.group(1); System.out.println(tmp); } }
}
</source>