解决方案 1
您可以在此处使用此正则表达式来匹配您提供的所有示例:
/(https?:\/\/www\.)?instagram\.com(\/p\/\w+\/?)/
说明
正则表达式的第一部分查找http 或https,后跟www.,并使整个组合成为可选。
(https?:\/\/www\.)?
第二部分是寻找字符串instagram.com
instagram\.com
第三部分是查找/p/ 之后的斜线后面的任何字母,以及可选的尾随斜线/。请注意,正则表达式的这部分在括号中,因此您可以稍后在使用 preg_match_all 时检索它。
(\/p\/\w+\/?)
解决方案 2
如果您也希望能够支持以下模式(with http/https 和 不 www):
http://instagram.com/p/BkbwlrfjGHY
http://instagram.com/p/BkbwlrfjGHY/
https://instagram.com/p/BkbwlrfjGHY
https://instagram.com/p/BkbwlrfjGHY
你可以使用这个正则表达式:
/(https?:\/\/(www\.)?)?instagram\.com(\/p\/\w+\/?)/
示例
$string = 'https://www.instagram.com/p/abcd/?post->
https://www.instagram.com/p/efgh
http://www.instagram.com/p/iJkL/ ->
http://www.instagram.com/p/MnNadfoadf
instagram.com/p/ACDOFfaf ->
instagram.com/p/AFMDAOF';
preg_match_all('/(https?:\/\/(www\.)?)?instagram\.com(\/p\/\w+\/?)/', $string, $matches);
然后,如果您执行var_dump 的$matches:
array(4) {
[0]=>
array(6) {
[0]=>
string(33) "https://www.instagram.com/p/abcd/"
[1]=>
string(32) "https://www.instagram.com/p/efgh"
[2]=>
string(32) "http://www.instagram.com/p/iJkL/"
[3]=>
string(37) "http://www.instagram.com/p/MnNadfoadf"
[4]=>
string(24) "instagram.com/p/ACDOFfaf"
[5]=>
string(23) "instagram.com/p/AFMDAOF"
}
[1]=>
array(6) {
[0]=>
string(12) "https://www."
[1]=>
string(12) "https://www."
[2]=>
string(11) "http://www."
[3]=>
string(11) "http://www."
[4]=>
string(0) ""
[5]=>
string(0) ""
}
[2]=>
array(6) {
[0]=>
string(4) "www."
[1]=>
string(4) "www."
[2]=>
string(4) "www."
[3]=>
string(4) "www."
[4]=>
string(0) ""
[5]=>
string(0) ""
}
[3]=>
array(6) {
[0]=>
string(8) "/p/abcd/"
[1]=>
string(7) "/p/efgh"
[2]=>
string(8) "/p/iJkL/"
[3]=>
string(13) "/p/MnNadfoadf"
[4]=>
string(11) "/p/ACDOFfaf"
[5]=>
string(10) "/p/AFMDAOF"
}
}
现在要检索每个 id,您可以使用 foreach:
foreach($matches[3] as $instagramId){
echo $instagramId . "<br>";
}
结果将是:
/p/abcd/
/p/efgh
/p/iJkL/
/p/MnNadfoadf
/p/ACDOFfaf
/p/AFMDAOF