如何编写一个匹配所有有效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-._~!$&'()*+,;=:/?@]+)?$
字符串
7条答案
按热度按时间whlutmcx1#
Uri.IsWellFormedUriString对你有用吗?
jpfvwuh42#
URI规范说:
第一个月
(我猜这与另一个答案中给出的STD 66链接中的正则表达式相同。
但是 * 分解 * 并不是 * 验证 *。要正确地验证URI,必须将URI的BNF转换为正则表达式。虽然有些BNF * 不能 * 表示为正则表达式,但我认为这一个可以 * 完成。但是不应该这样做-这将是一个巨大的混乱。最好使用库函数。
arknldoa3#
这个网站看起来很有前途:http://snipplr.com/view/6889/regular-expressions-for-uri-validationparsing/
他们提出了以下正则表达式:
字符串
x8diyxa74#
我根据RFC 3986(https://www.rfc-editor.org/rfc/rfc3986)提出的最好的正则表达式如下:
的数据
字符串
捕捉组
1.方案
1.权威
1.主机
1.端口
1.路径
1.查询
1.片段
wqnecbli5#
我找到的最好和最权威的指南在这里:http://jmrware.com/articles/2009/uri_regexp/URI_regex.html(为了回答您的问题,请参阅URI表条目)
表2沿着了RFC 3986中的所有规则以及每个规则的正则表达式实现。
这里有一个JavaScript实现:https://github.com/jhermsmeier/uri.regex
作为参考,URI正则表达式重复如下:
字符串
fruv7luv6#
是否有一些您关心的特定URI,或者您是否试图找到一个验证STD66的正则表达式?
我将指向这个正则表达式来解析URI。然后,理论上,您可以检查是否所有您关心的元素都在那里。
但我认为bdukes的回答更好。
uqcuzwp87#
对于js ppl,如果你对测试满意的话,可以看看前面的几行。注意这个正则表达式来自:[wizard 04][1]
快乐编码!
字符串