When supplying regexes in SHACL shapes, the escape backslack needs to be escaped itself for the shape to parse correctly.
Example
<#has-version>
...
sh:pattern "/[a-zA-Z0-9]{4,}/[a-zA-Z0-9\\-_\\.]{3,}/[a-zA-Z0-9\\-_\\.]{3,}/[a-zA-Z0-9\\-_\\.]{3,}$" .
Desired would be single escapes
<#has-version>
...
sh:pattern "/[a-zA-Z0-9]{4,}/[a-zA-Z0-9\-_\.]{3,}/[a-zA-Z0-9\-_\.]{3,}/[a-zA-Z0-9\-_\.]{3,}$" .