正则表达式被误解

时间:2019-06-19 08:58:37

标签: 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,})?)).*');

1 个答案:

答案 0 :(得分:1)

它与ww.test.c相匹配,因为ww.(?!www)部分的判断为TRUE:是,它不是www的。

更合适的模式(仍然不接受所有有效地址并且不考虑IPv4地址)将是:^(https?:\/\/|www\.)[a-zA-Z0-9]{1,}\.[a-zA-Z]{2,}(从一开始就匹配并遵守DRY原则)。