正则表达式将 URL 与可选的“www”和协议相匹配

Tim*_*lix 2 php regex url model-view-controller .htaccess

我正在尝试编写一个正则表达式。

一些背景信息:我尝试查看我网站 URL 的 REQUEST_URI 是否包含另一个 URL。像这些:

但是,该 url 不会总是包含“http”或“www”。所以模式也应该匹配像这样的字符串:

有一堆正则表达式可以匹配 url,但我发现没有一个可以在 http 和 www 上进行可选匹配。

我想知道匹配的模式是否可能是这样的:

^([az]) .(com|ca|org|etc)(. )

我想也许另一种选择可能是匹配任何包含点 (.) 的字符串。(因为我的应用程序中的其他 REQUEST_URI 通常不包含点)

这对任何人都有意义吗?我真的很感激这方面的一些帮助,因为它已经阻止了我的项目数周。

非常感谢你-蒂姆

小智 6

我建议使用一种简单的方法,基本上建立在你所说的基础上,只是任何带有点的东西,但也使用正斜杠。捕获所有内容而不会错过不寻常的 URL。所以像:

^((?:https?:\/\/)?[^./]+(?:\.[^./]+)+(?:\/.*)?)$
Run Code Online (Sandbox Code Playgroud)

它是这样写的:

  • 可选 http:// 或 https://
  • 非点或正斜杠字符
  • 一组或多组点,后跟非点或正斜杠字符
  • 可选的正斜杠及其后的任何内容

将整个事物捕获到第一个分组。

它将匹配,例如:

  • nic.uk
  • nic.uk/
  • http://nic.uk
  • http://nic.uk/
  • https://example.com/test/?a=bcd

验证它们是有效的 URL 是另一回事!它也将匹配:

  • index.php

它不会匹配:

  • directory/index.php

最小匹配基本上是something.something,其中没有正斜杠,除非它在点之后至少出现一个字符。因此,请确保不要将这种格式用于其他任何用途。