我需要验证字符串以确保它是有效的URI Template according to RFC 6570。使用正则表达式,应该非常简单。但是,我没有找到一个 - 是否真的没有针对URI模板的RegEx(还)?
上下文:我想在使用node.js处理的JSON模式中使用它。
答案 0 :(得分:0)
我认为您可以使用在Java中实现RFC-6570的library找到您想要的内容。
<dependency>
<groupId>com.github.fge</groupId>
<artifactId>uri-template</artifactId>
<version>yourVersionHere</version>
</dependency>
如果在解析过程中出错,URITemplate
构造函数将返回URITemplateParseException
。
final URITemplate template = new URITemplate("http://foo.bar/myPage{?map*}");
答案 1 :(得分:0)
在这里参加聚会有点晚了,但是由于唯一的答案不能解决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上签出。由于我使用的是ECMA语法,因此这应该可以在JSON模式中使用。也许还可以进行一些简化,但是正如我说的那样,这与ABNF保持一致,因此,如果您熟悉该规范,应该相对易于理解。