如何创作 正则表达式 匹配所有有效 URI 的字符串,而无法匹配所有无效 URI 的字符串?
为了具体说明我说 URI 时所指的内容,我在下面添加了最新 URI RFC 标准的链接。它定义了我想使用正则表达式验证的实体。
我不需要它来解析 URI。我只需要一个正则表达式来验证。
.Net 正则表达式格式是首选。 (.Net V1.1)
我目前的解决方案:
^([a-zA-Z0-9+.-]+):(//([a-zA-Z0-9-._~!$&'()*+,;=:]*)@)?([a-zA-Z0-9-._~!$&'()*+,;=]+)(:(\\d*))?(/?[a-zA-Z0-9-._~!$&'()*+,;=:/]+)?(\\?[a-zA-Z0-9-._~!$&'()*+,;=:/?@]+)?(#[a-zA-Z0-9-._~!$&'()*+,;=:/?@]+)?$(:(\\d*))?(/?[a-zA-Z0-9-._~!$&'()*+,;=:/]+)?(\?[a-zA-Z0-9-._~!$&'()*+,;=:/?@]+)?(\#[a-zA-Z0-9-._~!$&'()*+,;=:/?@]+)?$
最佳答案
The following line is the regular expression for breaking-down a well-formed URI reference into its components.
^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
(我想这与另一个答案中给出的 STD66 链接中的正则表达式相同。)
但是分解并不能验证。要正确验证 URI,必须翻译 BNF for URIs到正则表达式。虽然有些 BNF 不能表示为正则表达式,但我认为用这个可以做到。但不应该这样做——这将是一个巨大的困惑。最好使用库函数。
关于.net - 如何编写能够验证 URI 的正则表达式模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30847/