Php regex将URL与可选的';www';和协议
我想写一个regexp 一些背景信息:我正在尝试查看我的网站URL的请求URI是否包含其他URL。例如:Php regex将URL与可选的';www';和协议,php,regex,.htaccess,url,model-view-controller,Php,Regex,.htaccess,Url,Model View Controller,我想写一个regexp 一些背景信息:我正在尝试查看我的网站URL的请求URI是否包含其他URL。例如: google.com/search=xyz 然而,url并不总是包含“http”或“www”。因此,模式还应匹配字符串,如: yahoo.org/search=xyz www.yahoo.org/search=xyz msn.co.uk' ” 有很多regexp可以匹配URL,但我发现没有一个可以在http和www上进行可选匹配 我想知道匹配的模式是否可能是: ^([a-z])(co
- google.com/search=xyz
- yahoo.org/search=xyz
- www.yahoo.org/search=xyz
- msn.co.uk'
- ”
-Tim您可以尝试用
^(http://)?(www\)?
然后是匹配URL其余部分的规则。要匹配可选部分,请使用问号
?
,请参阅
例如,为了匹配可选的www.
,捕获域和搜索词,正则表达式可以是
(www\.)?(.+?)/search=(.+)
尽管,
+?
中的问号是一个非贪婪量词,请参见。这是我的两分钱:
$regex = "/http:\/\/mywebsite\.com\/((http:\/\/|www\.)?[a-z]*(\.org|\.co\.uk|\.com).*)/";
见
但我相信你能做得更好
希望能有帮助 我建议使用一种简单的方法,基本上是在你所说的基础上,只要有点,但也要使用正斜杠。捕获所有内容而不错过不寻常的URL。比如:
^((?:https?:\/\/)?[^./]+(?:\.[^./]+)+(?:\/.*)?)$
内容如下:
- 可选http://或https://
- 非点或正斜杠字符
- 一组或多组点,后跟非点或正斜杠字符
- 可选的正斜杠及其后的任何内容
nic.uk
nic.uk/
http://nic.uk
http://nic.uk/
https://example.com/test/?a=bcd
index.php
directory/index.php
something.something
,其中没有正斜杠,除非它至少超过点一个字符。因此,请确保不要将该格式用于其他任何内容
$re = '/http:\/\/mywebsite\.com\/((?:http:\/\/)?[0-9A-Za-z]+(?:-+[0-9A-Za-z]+)*(?:\.[0-9A-Za-z]+(?:-+[0-9A-Za-z]+)*)+(?:\/.*)?)/';
遵守必须包围连字符的DNS规则。用https替换http?也允许https URL
根据统计,至少有1519个,而且不是常数,因此您可能希望为域提供自己的捕获组,以便可以通过在线API或列出所有捕获组的文件进行验证。非常感谢OlafThanks的有用链接AkariAkaori。这看起来是一个很好的解决方案。我来试试看。嘿,SuperDuperApps。非常感谢你的帮助。我真的很喜欢这种方法。我很感谢你解释这一切。我想我理解语法和逻辑。这正是我需要的,而且到目前为止似乎还在工作。太好了,蒂姆,谢谢。很高兴听到它为您工作。它应该准备好与preg_match一起工作。如果你不知道如何使用preg_match,那么我相信有很多问题你可以通过复习找到答案。除非你有更具体的问题?