如何修改正则表达式以匹配页面上的所有网址

时间:2017-11-29 07:18:31

标签: regex url

我给搜索一个正则表达式一个简单的网址:

https://regex101.com/r/UmMEMl/1/

它匹配文本中的简单网址。如何修改此正则表达式以匹配文本中的所有网址?

我在正则表达方面不太好,所以有人可以看看

2 个答案:

答案 0 :(得分:0)

编写正则表达式以匹配所有网址并非易事。看看this link并选择一个满足您需求的产品。您链接到的那个和另一个答案中的一个都在该链接中的许多更复杂的url字符串上失败。

答案 1 :(得分:-1)

在你的例子中,你没有放旗帜。

  • 添加' g'全球'旗帜(意思是正则表达式不会在第一场比赛中停止)
  • 添加' m'多行搜索的标志意味着开始和结束锚(^和$)匹配行的开始和结束而不是整个文本。

https://regex101.com/r/UmMEMl/2

编辑:

您的原始正则表达式为#^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$#

你需要

#^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$#gm(注意末尾的两个字母,标志)

EDIT2

你可以缩短你的正则表达式

#^(https?:\/\/(www\.)?)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$#gm

请注意,abc|abdc|ab|abd可以写为abd?c?,而我用http:\/\/|https:\/\/|...缩短了