Web URL的正则表达式也与私有主机

时间:2016-03-14 09:45:24

标签: javascript java regex url web

我有以下正则表达式用于匹配Web URL模式,但它不识别私有主机,例如http://localhost:8080http://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}))$

2 个答案:

答案 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 )。

测试1 enter image description here

测试2 https://regex101.com/r/uQ5zD3/1

如果它对你有所帮助,请考虑购买这本最优秀的书(食谱意味着你可以按原样使用正则表达式并且它们会正常工作)并且不要忘记接受答案。

伟大的成功伙伴

答案 1 :(得分:1)

以下是您的正则表达式的说明:

Regular expression visualization