要在匹配*.cn*这个wildcard表达式的结果中去除调符合*google.cn*,正则应该怎么写?
就是说,我想要在匹配.cn的URL但不想要匹配google.cn的URL,应该怎么做?
要在匹配*.cn*这个wildcard表达式的结果中去除调符合*google.cn*,正则应该怎么写?
就是说,我想要在匹配.cn的URL但不想要匹配google.cn的URL,应该怎么做?
一个URL由协议+用户名+密码+域名+端口+路径+哈希构成,知道哪些是必须的,哪些是可选的,写起来就方便许多了。
这里就参考小鱼 @sofish 的代码片断吧。LZ自己选着用吧。
// 支持类型: // http(s)://(username:password@)(www.)domain.(com/co.uk)(/...) // (s)ftp://(username:password@)domain.com/... // git://(username:password@)domain.com/... // irc(6/s)://host:port/... // 需要测试 // afp over TCP/IP: afp://[<user>@]<host>[:<port>][/[<path>]] // telnet://<user>:<password>@<host>[:<port>/] // smb://[<user>@]<host>[:<port>][/[<path>]][?<param1>=<value1>[;<param2>=<value2>]] url: function(text){ var protocols = '((https?|s?ftp|irc[6s]?|git|afp|telnet|smb):\\/\\/)?' , userInfo = '([a-z0-9]\\w*(\\:[\\S]+)?\\@)?' , domain = '([a-z0-9]([\\w]*[a-z0-9])*\\.)?[a-z0-9]\\w*\\.[a-z]{2,}(\\.[a-z]{2,})?' , port = '(:\\d{1,5})?' , ip = '\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}' , address = '(\\/\\S*)?' , domainType = [protocols, userInfo, domain, port, address] , ipType = [protocols, userInfo, ip, port, address] , validate validate = function(type){ return new RegExp('^' + type.join('') + '$', 'i').test(text); }; return validate(domainType) || validate(ipType);
我来回答一下自己N年前的问题。。。
Python支持negative lookbehind assertion
In [9]: re.search(r'.*(?<!google)\.cn.*', "www.baidu.cn").group(0)
Out[9]: 'www.baidu.cn'
In [14]: re.search(r'.*(?<!google)\.cn.*', "www.google.cn")
Out[14]: None
这个事情貌似很难用一个正则解决,可以通过特定语言的and 或者 or进行组合来实现
匹配普遍意义的url
^(https?://)?([\da-z\.-]+)\.([a-z\.]{2,6})([/\w \.-]*)*/?$
匹配cn的url
^(https?://)?([\da-z\.-]+)\.cn([/\w \.-]*)*/?$
匹配google.cn的url
^(https?://)?google\.cn([/\w \.-]*)*/?$
你需要的是“预匹配”,详情可参见
http://blog.csdn.net/keystudio/articl...
例:Perl5的<<(?<!a)b>>将会匹配一个没有“a”作前导字符的“b”。
注:由于不同语言的不同正则实现支持不同,该效果不一定能实现,具体的语法也会有差异。