0
0
mirror of https://github.com/semver/semver.git synced 2025-08-22 22:08:33 +00:00

semver: Update FAQ entry on regular expressions

with a third variant that works without non-capturing groups and is
compatible with POSIX regex (i.e. for use in bash).
This commit is contained in:
Andreas Hartmann 2024-01-20 14:31:13 +01:00
parent 38a25311c9
commit a86e97a7d6

View File

@ -336,7 +336,7 @@ name and the semantic version is "1.2.3".
### Is there a suggested regular expression (RegEx) to check a SemVer string? ### Is there a suggested regular expression (RegEx) to check a SemVer string?
There are two. One with named groups for those systems that support them There are three. One with named groups for those systems that support them
(PCRE [Perl Compatible Regular Expressions, i.e. Perl, PHP and R], Python (PCRE [Perl Compatible Regular Expressions, i.e. Perl, PHP and R], Python
and Go). and Go).
@ -346,7 +346,7 @@ See: <https://regex101.com/r/Ly7O1x/3/>
^(?P<major>0|[1-9]\d*)\.(?P<minor>0|[1-9]\d*)\.(?P<patch>0|[1-9]\d*)(?:-(?P<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-]*))*))?(?:\+(?P<buildmetadata>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$ ^(?P<major>0|[1-9]\d*)\.(?P<minor>0|[1-9]\d*)\.(?P<patch>0|[1-9]\d*)(?:-(?P<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-]*))*))?(?:\+(?P<buildmetadata>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$
``` ```
And one with numbered capture groups instead (so cg1 = major, cg2 = minor, One with numbered capture groups instead (so cg1 = major, cg2 = minor,
cg3 = patch, cg4 = prerelease and cg5 = buildmetadata) that is compatible cg3 = patch, cg4 = prerelease and cg5 = buildmetadata) that is compatible
with ECMA Script (JavaScript), PCRE (Perl Compatible Regular Expressions, with ECMA Script (JavaScript), PCRE (Perl Compatible Regular Expressions,
i.e. Perl, PHP and R), Python and Go. i.e. Perl, PHP and R), Python and Go.
@ -357,6 +357,16 @@ See: <https://regex101.com/r/vkijKf/1/>
^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$ ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$
``` ```
One when non-capturing groups (beginning with `(?:`) aren't available (i.e. in
POSIX regex), which gives slightly different capture groups (cg1 = major, cg2 =
minor, cg3 = patch, cg5 = prerelease and cg10 = buildmetadata).
See: <https://regex101.com/r/7XA2jr/1>
```
^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-((0|[1-9][0-9]*|[0-9]*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9][0-9]*|[0-9]*[a-zA-Z-][0-9a-zA-Z-]*))*))?(\+([0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*))?$
```
About About
----- -----