我尝试过一个正则表达式来验证以下有效和无效的代理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
我需要帮助来进行完整的证明。
答案 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+
匹配用户名和密码的模式,后跟@
)
关闭非捕获组$
字符串结尾注意,由于您的示例包含多种可能的变体,因此此模式不能保证完全打样。