Skip to content

Instantly share code, notes, and snippets.

@ghusta
Created October 5, 2022 21:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ghusta/d1621088db77436d855dc0247f6e0526 to your computer and use it in GitHub Desktop.
Save ghusta/d1621088db77436d855dc0247f6e0526 to your computer and use it in GitHub Desktop.
Testing Java regex with SemVer example (named capturing group)
import org.junit.jupiter.api.Test;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static org.junit.jupiter.api.Assertions.fail;
class MyRegexTest {
@Test
void testRegex() {
String input = "1.2.3-beta.2";
// See : https://semver.org/spec/v2.0.0.html#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string
String semverRegex = "^(?<major>0|[1-9]\\d*)\\.(?<minor>0|[1-9]\\d*)\\.(?<patch>0|[1-9]\\d*)" +
"(?:-(?<prerelease>(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?" +
"(?:\\+(?<buildmetadata>[0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$";
Pattern r = Pattern.compile(semverRegex);
Matcher m = r.matcher(input);
if (m.find()) {
System.out.println("'major' : " + m.group("major"));
System.out.println("'minor' : " + m.group("minor"));
System.out.println("'patch' : " + m.group("patch"));
System.out.println("'prerelease' : " + m.group("prerelease"));
System.out.println("'buildmetadata' : " + m.group("buildmetadata"));
} else {
System.out.println("NO MATCH");
fail();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment