首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过rfc8141与URN匹配的Regex

通过rfc8141与URN匹配的Regex
EN

Stack Overflow用户
提问于 2019-11-25 12:48:10
回答 2查看 864关注 0票数 1

我很难找到一个Regex,它可以与rfc8141中描述的骨灰盒相匹配。我试过这个:

\A(?i:urn:(?!urn:)(?<nid>[a-z0-9][a-z0-9-]{1,31}):(?<nss>(?:[a-z0-9()+,-.:=@;$_!*']|%[0-9a-f]{2})+))\z

但这只与不含组件的瓮的第一部分相匹配。

例如,假设我们有相应的URN:urn:example:a123,0%7C00~&z456/789?+abc?=xyz#12/3,我们应该匹配以下组:

  • NID -示例
  • NSS -123,0%7C00~&z 456/789(从最后一个:‘tll我们匹配'?+’或'?=‘或'#’
  • R-组件- abc (从'?+‘到'?=’或‘#’)
  • F-组件- 12/3 (从“#”到末尾)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-26 10:24:13

我还没有阅读所有的规范,所以可能还有其他的规则需要实现,但是它应该会让您对可选组件有所了解:

代码语言:javascript
复制
\A(?i:urn:(?!urn:)(?<nid>[a-z0-9][a-z0-9-]{1,31}):(?<nss>(?:[-a-z0-9()+,.:=@;$_!*'&~\/]|%[0-9a-f]{2})+)(?:\?\+(?<rcomponent>.*?))?(?:\?=(?<qcomponent>.*?))?(?:#(?<fcomponent>.*?))?)\z

解释:

  • (?<nss>(?:[-a-z0-9()+,.:=@;$_!*'&~\/]|%[0-9a-f]{2})+)-已经移到列表的开头,以便在允许的字符中考虑,否则它的意思是“范围从,.”。字符&~/ (必须用“\”进行转义)也被添加到列表中,否则它将与您的示例不匹配。
  • 可选组件:(?:\?\+(?<rcomponent>.*?))?:在可选的非捕获组(?:)?中防止捕获标识符( ?+?=#部分)。字符?+必须用"\“转义。将捕获任何内容(.),但在惰性模式下(*?),否则找到的第一个组件将捕获所有内容,直到字符串结束为止。

参见Regex101中的工作示例

希望这有帮助

票数 4
EN

Stack Overflow用户

发布于 2021-03-30 18:19:59

如果要使用统一资源名称(URN) 8141:rfc8141验证字符串,可以引用URN8141Test.javaURN8141.java

它已经在我们的团队中使用了几年。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59032211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档