MFC:如何构建一个验证URL的正常表达式?

时间:2010-03-10 07:53:01

标签: regex mfc visual-c++

这是我使用的正则表达式,我使用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 :()

请帮忙...... 感谢...

6 个答案:

答案 0 :(得分:3)

  1. 使用IgnoreCase标志代替每种情况。
  2. 如果您希望字符串的开头是网址的开头,请在开头粘贴^
  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链接上验证。

(由我亲自撰写: - ))