$string1 = "/8-a-plastic-surgery-timeline-and-how-he-would-have-looked-like-without/70/1";
$string2 = "/48/88-mindbending-pictures-that-will-make-you-question-what-you-see/12";
$string3 = "/90-the-sleeping-position-of-women-reveal-a-lot-about-them/77";
从$ string1开始,我想 70
从$ string2,我想 48
从$ string3开始,我想 77
我尝试过以下代码:
preg_match("/(\/([0-9]+)\/*)([^\-]$)/", $string2, $matches);
但它没有给我一篇关于所有字符串的文章的ID,我非常接近它,但却无法获得完美的文章。
请帮我解决这个问题。提前致谢
答案 0 :(得分:1)
这是一个基本的解决方案。
正则表达式:(?<=\/)(\d+?)(?=\/)|(?<=[A-z]{4}\/)(\d+)
如果三个链接有一定的统一性会有所帮助,但如果你只需要一个权宜之计的解决方案,那么现在就足够了。
答案 1 :(得分:0)
我不确定另一个答案的正则表达式是否也会处理其他情况。
我猜测您提供的网址中ID的逻辑是:
“id是第一个网址部分,只是一个数字。”
考虑到这一点,您可以使用此功能:
// returns -1 if no id is found
function getID($str)
{
$arr = explode("/",$str);
foreach($arr as $element)
{
if(!empty($element) && ((string)intval($element)==$element))
{
return $element;
}
}
return -1;
}
在此处查看此操作:https://3v4l.org/rcTl6
它输出所需的结果:
70
48
77
142
P.S。而且,没有使用正则表达式。所以no extra problems:D
答案 2 :(得分:0)
正则表达式没有任何问题。只需要纠正它。
preg_match("/(\d+)\/\d+$|\/(\d+)\/\d+|\/(\d+)$/", $str, $output);