需要 RegEx for URI 模板 (RFC 6570)
RegEx for URI Templates (RFC 6570) wanted
我需要验证一个字符串以确保它是有效的 URI Template according to RFC 6570。 应该用正则表达式就很容易了。但是,我没有找到 – 真的没有用于 URI 模板的 RegEx(还)吗?
上下文:我想在使用 node.js 处理的 JSON 模式中使用它。
我想您可能会在 library 中找到您想要的东西,它在 Java.
中实现了 RFC-6570
<dependency>
<groupId>com.github.fge</groupId>
<artifactId>uri-template</artifactId>
<version>yourVersionHere</version>
</dependency>
如果解析过程中出现错误,URITemplate
构造函数将 return 一个 URITemplateParseException
。
final URITemplate template = new URITemplate("http://foo.bar/myPage{?map*}");
这里的聚会有点晚了,但由于唯一的答案没有解决 URI 模板的正则表达式问题,我决定尝试一下,因为我也找不到。这完全基于 Section 2 of RFC 6570 中的 ABNF 规则,我包含了一些 ASCII 艺术来映射不同的组件。
^([^\x00-\x20\x7f"'%<>\^`{|}]|%[0-9A-Fa-f]{2}|{[+#./;?&=,!@|]?((\w|%[0-9A-Fa-f]{2})(\.?(\w|%[0-9A-Fa-f]{2}))*(:[1-9]\d{0,3}|\*)?)(,((\w|%[0-9A-Fa-f]{2})(\.?(\w|%[0-9A-Fa-f]{2}))*(:[1-9]\d{0,3}|\*)?))*})*$
\ \_____________/ \____________/ \__________________/ \__________________/ /\________________/ / \_________________________________________________________________/ //
\ pct-encoded / \ operator \ varchar varchar / modifier-level4 / varspec //
\______________________________________/ \ \________________________________________/ / //
literals \ \ varname / //
\ \_________________________________________________________/ //
\ \ varspec //
\ \____________________________________________________________________________________________________________________________//
\ variable-list /
\_________________________________________________________________________________________________________________________________________/
expression
您可以在 regex101.com 上查看。这应该在 JSON 架构中工作,因为我使用的是 ECMA 语法。可能还可以进行一些简化,但正如我所说,这与 ABNF 一致,因此如果您熟悉规范,它应该 相对 容易理解。
我需要验证一个字符串以确保它是有效的 URI Template according to RFC 6570。 应该用正则表达式就很容易了。但是,我没有找到 – 真的没有用于 URI 模板的 RegEx(还)吗?
上下文:我想在使用 node.js 处理的 JSON 模式中使用它。
我想您可能会在 library 中找到您想要的东西,它在 Java.
中实现了 RFC-6570<dependency>
<groupId>com.github.fge</groupId>
<artifactId>uri-template</artifactId>
<version>yourVersionHere</version>
</dependency>
如果解析过程中出现错误,URITemplate
构造函数将 return 一个 URITemplateParseException
。
final URITemplate template = new URITemplate("http://foo.bar/myPage{?map*}");
这里的聚会有点晚了,但由于唯一的答案没有解决 URI 模板的正则表达式问题,我决定尝试一下,因为我也找不到。这完全基于 Section 2 of RFC 6570 中的 ABNF 规则,我包含了一些 ASCII 艺术来映射不同的组件。
^([^\x00-\x20\x7f"'%<>\^`{|}]|%[0-9A-Fa-f]{2}|{[+#./;?&=,!@|]?((\w|%[0-9A-Fa-f]{2})(\.?(\w|%[0-9A-Fa-f]{2}))*(:[1-9]\d{0,3}|\*)?)(,((\w|%[0-9A-Fa-f]{2})(\.?(\w|%[0-9A-Fa-f]{2}))*(:[1-9]\d{0,3}|\*)?))*})*$
\ \_____________/ \____________/ \__________________/ \__________________/ /\________________/ / \_________________________________________________________________/ //
\ pct-encoded / \ operator \ varchar varchar / modifier-level4 / varspec //
\______________________________________/ \ \________________________________________/ / //
literals \ \ varname / //
\ \_________________________________________________________/ //
\ \ varspec //
\ \____________________________________________________________________________________________________________________________//
\ variable-list /
\_________________________________________________________________________________________________________________________________________/
expression
您可以在 regex101.com 上查看。这应该在 JSON 架构中工作,因为我使用的是 ECMA 语法。可能还可以进行一些简化,但正如我所说,这与 ABNF 一致,因此如果您熟悉规范,它应该 相对 容易理解。