如何使用CAtlRegExp获得与a@a.aaaa匹配的正则表达式,而不是a@a.aaaaa?
我正在使用CAtlRegExp http://msdn.microsoft.com/en-us/library/k3zs4axe(VS.80).aspx来尝试匹配电子邮件地址。我想使用正则表达式
^[A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}$
摘自here。 但是CAtlRegExp接受的语法与那里使用的语法不同。此正则表达式返回错误REPARSE_ERROR_BRACKET_EXPECTED,您可以使用此应用程序自行检查:http://www.codeproject.com/KB/string/mfcregex.aspx
使用该应用程序,我创建了这个正则表达式:
^[a-zA-Z0-9\._%\+\-]+@([a-zA-Z0-9-]+\.)+[a-zA-Z]$
但问题是这与a@a.aaaaa匹配为有效,我需要它匹配op级域的最多4个字符。
那么,我怎样才能得到一个与a@a.aaaa相匹配的正则表达式而不是a@a.aaaaa?
答案 0 :(得分:2)
尝试:^[a-zA-Z0-9\._%\+\-]+@([a-zA-Z0-9-]+\.)+
\c\c\c?\c?$
此表达式替换CAtlRegExp不支持的[A-Z]{2,4}
序列\c\c\c?\c?
\c
是[a-zA-Z]
的缩写。第3和第4 \c
之后的问号表示它们可以匹配零个或一个字符。因此,表达式的这一部分匹配2,3或4个字符,但不多也不少。
答案 1 :(得分:1)
您正在尝试匹配电子邮件地址,这是一种非常广泛使用的互联网通信的关键要素。
我要说的是,这项工作最好用最广泛使用的最正确的正则表达式。
由于RFC822描述了电子邮件地址格式规则,因此对“RFC822电子邮件正则表达式”等内容进行互联网搜索似乎很有用。
对于Perl,答案似乎很简单:使用Mail::RFC822::Address: regexp-based address validation
RFC 822 Email Address Parser in PHP
因此,要实现最正确的电子邮件地址处理,应该找到特定工具包(在您的情况下为ATL)的某个地方最精确的正则表达式,或者 - 如果还没有合适的现有正则表达式 - 适应一个非常精确的另一个工具包的正则表达式(上面的Perl似乎是一个非常完整但虽然困难的候选人)。
如果您正在尝试匹配电子邮件地址的特定子部分(根据您的问题似乎就是这种情况),那么最开始可能仍然有意义-date / correct / universal regex,特别是将其限制为您需要的部分。
也许我说的很明显,但我希望它有所帮助。