我正在努力寻找可以匹配rfc8141中描述的 URN 的正则表达式。我试过这个:
\A(?i:urn:(?!urn:)(?<nid>[a-z0-9][a-z0-9-]{1,31}):(?<nss>(?:[a-z0-9()+,-.:=@;$_!*']|%[0-9a-f]{2})+))\z
但是这个只匹配没有组件的URN的第一部分。
例如,假设我们有相应的 URN:urn:example:a123,0%7C00~&z456/789?+abc?=xyz#12/3
我们应该匹配以下组:
- NID - 示例
- NSS - a123,0%7C00~&z456/789(从最后一个 ':' tll 我们匹配 '?+' 或 '?=' 或 '#'
- r 分量 - abc(从 '?+' 到 '?=' 或 '#'')
- f 分量 - 12/3(从 '#' 到结束)