i’m writing this Java program for fun and i’m trying to get groups of substring with a regex. My string is read from a file and it’s something like:
t<firstName type="String">John</firstName>
where t is a tab.
I wrote this code to isolate the needed substring, but while on online testing it works, in my code it says “no matches”.
try {
Pattern r = Pattern.compile(".+<(.+) type="(.+)">(.+)</(.+)>");
Matcher m = r.matcher(line);
String name = m.group(1);
String type = m.group(2);
String value = m.group(3);
System.out.println(""" + line + "" matched regex");
} catch (Exception ex){
System.out.println(""" + line + "" didn't match regex");
}
My output is:
" <firstName type="String">John</firstName>" didn't match regex " <surname type="String">Doe</surname>" didn't match regex " <age type="int">18</age>" didn't match regex
Do you have any clue?
Advertisement
Answer
You’ve just created a matcher in this line: Matcher m = r.matcher(line). If you print the exception, you’ll see No match found message.
You are using m.group() without calling matches() method.
Try this:
try {
Pattern r = Pattern.compile(".+<(.+) type=\"(.+)\">(.+)</(.+)>");
Matcher m = r.matcher(line);
if (m.matches()) {
String name = m.group(1);
String type = m.group(2);
String value = m.group(3);
System.out.println(""" + line + "" matched regex");
}
} catch (Exception ex) {
System.out.println(""" + line + "" didn't match regex");
}