@@ -52,30 +52,51 @@ public static Map<String, String> patternGroupValues(String text, String regex)
52
52
*/
53
53
public static Map <String , String > patternGroupValues (Pattern pattern , String text ) {
54
54
Map <String , String > result = new HashMap <>();
55
+
55
56
Matcher groupMatcher = pattern .matcher (text );
56
57
if (groupMatcher .find ()) {
57
- // add group index to value entries
58
+ // group index values
58
59
for (int i = 1 ; i <= groupMatcher .groupCount (); i ++) {
59
60
result .put (String .valueOf (i ), groupMatcher .group (i ));
60
61
}
61
-
62
- for (String groupName : patternGroups (pattern )) {
62
+ // group name values
63
+ for (String groupName : patternGroupNames (pattern )) {
63
64
result .put (groupName , groupMatcher .group (groupName ));
64
65
}
65
66
}
67
+
66
68
return result ;
67
69
}
68
70
69
- public static Set <String > patternGroups (Pattern groupPattern ) {
70
- Set <String > groupNames = new HashSet <>();
71
- Pattern groupNamePattern = Pattern .compile ("\\ (\\ ?<(?<name>[a-zA-Z][a-zA-Z0-9]*)>" );
72
- Matcher groupNameMatcher = groupNamePattern .matcher (groupPattern .toString ());
71
+ public static Set <String > patternGroups (Pattern pattern ) {
72
+ Set <String > groups = new HashSet <>();
73
+
74
+ // group indexes
75
+ for (int groupIndex = 1 ; groupIndex <= patternGroupCount (pattern ); groupIndex ++) {
76
+ groups .add (String .valueOf (groupIndex ));
77
+ }
78
+ // group names
79
+ groups .addAll (patternGroupNames (pattern ));
80
+
81
+ return groups ;
82
+ }
83
+
84
+ public static int patternGroupCount (Pattern pattern ) {
85
+ return pattern .matcher ("" ).groupCount ();
86
+ }
87
+
88
+ public static Set <String > patternGroupNames (Pattern pattern ) {
89
+ Set <String > groups = new HashSet <>();
73
90
74
- // add group name to value Entries
91
+ // group names
92
+ Pattern groupNamePattern = Pattern .compile ("\\ (\\ ?<(?<name>[a-zA-Z][a-zA-Z0-9]*)>" );
93
+ Matcher groupNameMatcher = groupNamePattern .matcher (pattern .toString ());
75
94
while (groupNameMatcher .find ()) {
76
95
String groupName = groupNameMatcher .group ("name" );
77
- groupNames .add (groupName );
96
+ groups .add (groupName );
78
97
}
79
- return groupNames ;
98
+
99
+ return groups ;
80
100
}
101
+
81
102
}
0 commit comments