Regex 正则表达式被误解了

Regex 正则表达式被误解了,regex,delphi,Regex,Delphi,在我的单元测试中,URL http://www.test.c被接受,但它应该提供一个错误。该代码在Delphi中使用 kRgEx := TRegEx.Create ('((https|http):\/\/)?(((?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9]+\.[a-zA-Z][a-zA-Z]+)|(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d{1,})?)).*'); 它与ww.test.c匹配,因为ww.对(?!www)部分

在我的单元测试中,URL http://www.test.c被接受,但它应该提供一个错误。该代码在Delphi中使用

kRgEx := TRegEx.Create
('((https|http):\/\/)?(((?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9]+\.[a-zA-Z][a-zA-Z]+)|(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d{1,})?)).*');

它与
ww.test.c
匹配,因为
ww.
(?!www)
部分求值为TRUE:是的,它不是
www

更合适的模式(仍然不接受所有有效地址并忽略IPv4地址)是:
^(https?:\/\/\/\/\\ www\)[A-zA-Z0-9]{1,}\.[A-zA-Z]{2,}
(从一开始就匹配并尊重原则)