我有匹配网址((https?:\/\/)?[\w-]+(\.[\w-]+)+\.?(:\d+)?(\/\S*)?)
的正则表达式,它可以完成工作,它可以满足我的需要。但是,当我不想要它时,它也会匹配电子邮件的域名。
目前匹配:
我不希望它与最后一个匹配,所以它只匹配前三个。我尝试在前面添加(?!=@)
但是没有这样做。如何让它忽略前面带有@符号的结果?
答案 0 :(得分:2)
为正则表达式添加锚点
^((https?:\/\/)?[\w-]+(\.[\w-]+)+\.?(:\d+)?(\/\S*)?)$
参见示例http://regex101.com/r/lI8kZ6/1
<强> Explantion 强>
^
在行的开头声明正则表达式
$
在行的末尾断言正则表达式
修改强>
如果网址嵌入在文本中,请使用\s
将正则表达式匹配字符串删除为
(\s|^)((https?:\/\/)?[\w-]+(\.[\w-]+)+\.?(:\d+)?(\/\S*)?)\s
参见示例
答案 1 :(得分:2)
仅当您的字符串 包含您要匹配的网址时,才能使用锚点。情况可能并非如此。
相反,您真正想要的是匹配URL前面有空格(或没有空格)的位置。尝试:
(?:^|(?<=\s))YOUR REGEX HERE
这将检查你已经拥有的正则表达式之前是否有空格或空格字符。
考虑进一步将(?=\s|$)
添加到正则表达式的末尾,以确保它与半个单词不匹配。
答案 2 :(得分:1)
^((https?:\/\/)?[\w-]+(\.[\w-]+)+\.?(:\d+)?(\/[\S]*)?)$
添加锚点以删除部分匹配。启用m
或multliline
标记。参见演示。