我在验证第2组时遇到问题,第2组是(子)域和扩展名。
我的正则表达式:/^(http:[\/]{2})([\w\d\-\_\.]+)(\/(?:[\/\w\W]+)?)?$/
问题:([\w\d\-\_\.]+)
问题:http://www.....google....com/stuff有效,我尝试[\w\d\-\_][(?<!\.)\.(?!\.)]+
,但唉它没有用。
如何制作它,以便在.
后面.
或.
前面{{1}}时,正则表达式将返回false。
答案 0 :(得分:2)
您可以使用否定前瞻:
~^https?:/{2}(?!.*?\.\.)([\w\d.-]+)(/.*)?$~
在PHP中,您也可以使用parse_url
函数来解析URL。
(?!.*?\.\.)
是一个消极的前瞻,不允许2个点。
答案 1 :(得分:1)
您可以使用此版本的your regex:
^(http:[\/]{2})((?![^\/]*?\.{2}[^\/]*?)[\w\d\-\_\.]+)(\/(?:[\/\w]+)?)?$
问题在于\W
(与同一角色类中的\w
一起)匹配所有内容,甚至是新行。