.net - 如何编写能够验证 URI 的正则表达式模式?

标签 .net regex

如何创作 正则表达式 匹配所有有效 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-._~!$&'()*+,;=:/?@]+)?$

最佳答案

URI specification says :

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/

相关文章:

regex - 创建密码验证功能 Oracle 10g

c# - 依赖程序集的版本是否存储在引用程序集中?

c# - 未找到 System.Net.SecurityProtocolType.Tls12 定义

.net - 如何解决错误 26 : Error Locating Server/Instance Specified in production environment?

c# - 通过 TcpClient [C#] 的 HTTP(S) POST/GET 请求

ios - 如何重复捕获组?

c# - 在运行时不是特定于版本的 Visual Studio 项目引用

Java仅从字符串中提取第一个字母/字符

php - 如何更改此正则表达式以便它选择具有多个 img 的段落元素

regex - perl - 通过键匹配正则表达式而不使用智能匹配来过滤散列