这是我使用的正则表达式,我使用MFC的CAtlRegExp解析它:
(((H | H)(T | T)(T | T)(P | P)(S | S)):????//?)([A-ZA-Z0-9? ] + [\。] + [A-ZA-Z0-9] + [\。] + [A-ZA-Z0-9])
除了一个缺陷外,它工作正常。当URL以字符开头时,它仍然将其作为URL接受。
ex输入:
这是一个链接www.google.com(我可以在其中标记空格并验证每个单词)
是... www.google.com(此字符串仍然符合上面的RegEx :()
请帮忙...... 感谢...
答案 0 :(得分:3)
^
答案 1 :(得分:2)
你需要告诉正则表达式只匹配字符串的开头和结尾。我不确定你是如何在VC ++中那样做的 - 在大多数正则表达式中,你用^
和$
来包含模式。 ^
表示“字符串的开头”,$
表示“字符串的结尾。”
^(((h|H?)(t|T?)(t|T?)(p|P?)(s|S?))\://)?([a-zA-Z0-9]+[\\.]+[a-zA-Z0-9]+[\\.]+[a-zA-Z0-9])$
第二个是匹配,因为字符串包含有效的网址。
答案 2 :(得分:2)
如何使用CUrl(即“C-Url”,在ATL中,而不是像libcurl中那样卷曲),可以使用CUrl :: CrackUrl“解析”URL。如果该函数返回FALSE,则假定它不是有效的URL。
也就是说,分解URL足够复杂以保证正确的解析器,而不是基于正则表达式的分解。 (CFR)。 rfc 2396等关于复杂性的概述。
答案 3 :(得分:1)
这个怎么样:(((f|ht)tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+) ?
答案 4 :(得分:1)
使用^
启动正则表达式并以$
结束,只有在整个sting匹配时才会使正则表达式匹配(如果这是你想要的):
^(((h|H?)(t|T?)(t|T?)(p|P?)(s|S?))\://)?([a-zA-Z0-9]+[\.]+[a-zA-Z0-9]+[\.]+[a-zA-Z0-9])$
答案 5 :(得分:1)
此正则表达式已经过测试,适用于以下
HTTP | https://host[:port]/[?][parameter=value] *
public static final String URL_PATTERN = "(https?|ftp)://(www\\.)?(((([a-zA-Z0-9.-]+\\.){1,}[a-zA-Z]{2,4}|localhost))|((\\d{1,3}\\.){3}(\\d{1,3})))(:(\\d+))?(/([a-zA-Z0-9-._~!$&'()*+,;=:@/]|%[0-9A-F]{2})*)?(\\?([a-zA-Z0-9-._~!$&'()*+,;=:/?@]|%[0-9A-F]{2})*)?(#([a-zA-Z0-9._-]|%[0-9A-F]{2})*)?";
PS。它还在localhost链接上验证。
(由我亲自撰写: - ))