我有3个不同的字符串:
从每一个我需要得到name_of_news
字符串,其中几乎可以包含所有符号。我认为从.html
到第一个/123-
(带有id的斜线)或/02/
(日期)是明智的,但是无法弄清楚如何以更恰当的方式做到这一点。可能有人可以帮助我吗?
答案 0 :(得分:3)
你不需要反过来。您可以构建正则表达式以将该部分放入捕获组中。
您可以使用此正则表达式:
~.*?/(?:\d+-)?([^/]*)\.html~
...并获得第1组。
~
^
.* # match everything
/ # Till the last `/`
(?: # Non-capturing group
\d+- # One or more digits followed by a hyphen
)? # Optional
( # Capture group 1
[^/.]* # Match anything except `/` or `.`
)
\. # Match a dot
html # html (at the end)
$
~
答案 1 :(得分:0)
$url = 'http://site.com/id-name_of_news.html';
var_dump(end(explode('/', $url)));
或强>
$url = 'http://site.com/id-name_of_news.html';
var_dump(substr($url, strrpos($url, '/')+1));
答案 2 :(得分:0)
您可以尝试使用此模式:
~http://[^/\s]+/(?:(?:[^/\s]+/){2,3})?(?:id-)?\K[^\s]+(?=\.html)~
为您提供整个模式的结果。
答案 3 :(得分:0)
你真的需要正则表达式吗?您可以使用以下替代方法:
.html
$pos = strrpos($url, '.html');
的结尾位置
/
pos
后面查找最近的$slashpos = strrpos($url, '/', $pos * -1);
$url
开始,将$slashpos
的子字符串从$pos