0
0
mirror of https://github.com/semver/semver.git synced 2025-08-22 13:58: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?
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
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-]+)*))?$
```
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
with ECMA Script (JavaScript), PCRE (Perl Compatible Regular Expressions,
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-]+)*))?$
```
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
-----