正则表达式以验证python中的代理uri

时间:2019-11-12 09:15:16

标签: regex validation proxy

我尝试过一个正则表达式来验证以下有效和无效的代理URI。我需要帮助来证明python中的有效和无效方案。

输入应采用以下方式:

000.0000.00.00                               #invalid
912.456.123.123                               #invalid
999.999.999.999:99999                         #invalid
192.168.1.1                                   #valid
192.168.1.1.1                                 #invalid
proxy.company.com:3128                        #valid
https://proxy.company.com:3128                #valid
https://proxy.company.com:3128/?action=list   #valid
user:pass@proxy.company.com:3128              #valid
localhost:8000                                #valid
http://localhost:8000                         #valid
3...3                                         #invalid

我的正则表达式:

(^(\w+)(?::)+((\w+))@)|(^https?:\/\/)|(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])|(?:\.[^0-9])|(localhost)(?::(?![7-9]\d\d\d\d)(?!6[6-9]\d\d\d)(?!65[6-9]\d\d)(?!655[4-9]\d)(?!6553[6-9])(?!0+)(?P<Port>\d{1,5}))?(?:\/?|[\/?]\S+)$

这些情况即将生效:

3...3
192.168.1.1.1

我需要帮助来进行完整的证明。

1 个答案:

答案 0 :(得分:0)

要匹配示例数据,一种解决方案可能是匹配ip号,或者匹配类似url的结构,或者使用@匹配结构

^(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|(?:https?://)?(?![\d.]+:)\w+(?:\.\w+)*:\d+\S+|\w+:\w+@(?![\d.]+:)\w+(?:\.\w+)*:\d+)$

大部分(您可以相应调整)

  • ^字符串的开头
  • (?:非捕获组
    • (?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)模式为match an ip number
    • |
    • (?:https?://)?(?![\d.]+:)\w+(?:\.\w+)*:\d+\S+匹配类似网址的模式,该模式不能仅由冒号前的数字和点组成。
    • |
    • \w+:\w+@(?![\d.]+:)\w+(?:\.\w+)*:\d+匹配用户名和密码的模式,后跟@
  • )关闭非捕获组
  • $字符串结尾

Regex demo

注意,由于您的示例包含多种可能的变体,因此此模式不能保证完全打样。