我有以下正则表达式用于匹配Web URL模式,但它不识别私有主机,例如http://localhost:8080或http://internalhost.mydomain。如何修改此正则表达式以匹配它。
^(((HTTP | HTTPS |的Http |的Https | HTTP | HTTPS):???!//(:(:A-ZA-Z0-9 \ $ -_ + * \'() ?\,\; \ \&安培; \ =] |(?:\%[A-FA-F0-9] {2})?){1,64}(::(:[A-ZA-Z0 -9 \ $ -_ + * \'()\,\; \ \&安培; \ =] |!?(?:\%[A-FA-F0-9] {2})){1,25 })\ @))((:(:??????[A-ZA-Z0-9] [A-ZA-Z0-9 - ] {0,64})+(:( ?:航空| ARPA |亚洲| A [cdefgilmnoqrstuwxz])|(?:BIZ | b [abdefghijmnorstvwyz])|(?:猫| COM |鸡舍| C [acdfghiklmnoruvxyz])| d [ejkmoz] |(?:EDU | E [cegrstu ])| F [ijkmor] |(?:GOV | G [abdefghilmnpqrstuwy])| H [kmnrtu] |(:信息| INT | I [delmnoqrst])|(?:?工作| f] [EMOP])| K [ eghimnrwyz] | L [abcikrstuvy] |(?:密耳|摩比|博物馆| M [acdghklmnopqrstuvwxyz])|(:名称|净| N [acefgilopruz])|(?:有机| OM)|(?:亲| p [aefghklmnrstwy])| QA | R [eouw] | S [abcdeghijklmnortuvyz] |(?:电话|旅行| T [cdfghjklmnoprtvwz])| U [agkmsyz] | v [aceginu] | W [FS] | Y [ETU] | Z [AMW]))|(:( ?: 25 [0-5] | 2 [0-4] [0-9] | [0-1] [0-9] {2} | [1-9 ] [0-9] | [1-9])(?: 25 [0-5] | 2 [0-4] [0-9] | [0-1] [0-9] {2} | [1-9] [0-9] | [1-9] | 0)(?: 25 [0-5] | 2 [0-4] [0-9] | [0-1] - [O- 9] {2} | [1-9] [0-9] | [1-9] |。0)(?: 25 [0-5] | 2 [0-4] [0-9] | [0 -1] [0-9] {2} | [1-9] [0-9] |?[0-9])))(:: \ d {1,5}))$
答案 0 :(得分:1)
也许您应该考虑以下正则表达:来自O'reilly第448-450页的“正则表达式食谱第2版”。
对于Java 7 :
\A
(# Scheme
(?<scheme>[a-z][a-z0-9+\-.]*):
(# Authority & path
//
(?<user>[a-z0-9\-._~%!$&'()*+,;=]+@)? # User
(?<host>[a-z0-9\-._~%]+ # Named host
| \[[a-f0-9:.]+\] # IPv6 host
| \[v[a-f0-9][a-z0-9\-._~%!$&'()*+,;=:]+\]) # IPvFuture host
(?<port>:[0-9]+)? # Port
(?<hostpath>(/[a-z0-9\-._~%!$&'()*+,;=:@]+)*/?) # Path
|# Path without authority
(?<schemepath>/?[a-z0-9\-._~%!$&'()*+,;=:@]+
(/[a-z0-9\-._~%!$&'()*+,;=:@]+)*/?)?
)
|# Relative URL (no scheme or authority)
(?<relpath>
# Relative path
[a-z0-9\-._~%!$&'()*+,;=@]+(/[a-z0-9\-._~%!$&'()*+,;=:@]+)*/?
|# Absolute path
(/[a-z0-9\-._~%!$&'()*+,;=:@]+)+/?
)
)
# Query
(?<query>\?[a-z0-9\-._~%!$&'()*+,;=:@/?]*)?
# Fragment
(?<fragment>\#[a-z0-9\-._~%!$&'()*+,;=:@/?]*)?
\Z
您需要自由间距/注释( x )和不区分大小写( i )标记。
经过测试:https://www.chromestatus.com/features/6750456638341120
http://www.regexplanet.com/advanced/java/index.html
适用于javascript :
^([a-z][a-z0-9+\-.]*:(\/\/([a-z0-9\-._~%!$&'()*+,;=]+@)?([a-z0-9\-._~%]+|\[[a-f0-9:.]+\]|\[v[a-f0-9][a-z0-9\-._~%!$&'()*+,;=:]+\])(:[0-9]+)?(\/[a-z0-9\-._~%!$&'()*+,;=:@]+)*\/?|(\/?[a-z0-9\-._~%!$&'()*+,;=:@]+(\/[a-z0-9\-._~%!$&'()*+,;=:@]+)*\/?)?)|([a-z0-9\-._~%!$&'()*+,;=@]+(\/[a-z0-9\-._~%!$&'()*+,;=:@]+)*\/?|(\/[a-z0-9\-._~%!$&'()*+,;=:@]+)+\/?))(\?[a-z0-9\-._~%!$&'()*+,;=:@\/?]*)?(#[a-z0-9\-._~%!$&'()*+,;=:@\/?]*)?$
您需要不区分大小写的标记( i )。
测试2 :https://regex101.com/r/uQ5zD3/1
如果它对你有所帮助,请考虑购买这本最优秀的书(食谱意味着你可以按原样使用正则表达式并且它们会正常工作)并且不要忘记接受答案。
伟大的成功伙伴
答案 1 :(得分:1)
以下是您的正则表达式的说明: