[英]Get string between first separator and last dot
对不起,我是一个非常老的开发人员。 6年前因严重脑梗塞停止发育后,我的头不再那么新鲜了,我忘记了很多东西,而且,如你所见,一个简单的就像这个一样。
我想对我 10 年前制作的旧脚本进行一些更新,我用它来订购和管理我的电子书收藏。
从朋友那里得到一些新的电子书后,我现在需要从文件中提取作者的姓名:
$file_name = Bitcoin en andere cryptovaluta - Mary-Jane Lasterie-Janssen.epub
$file_name = Fur - Grazia Hattem-Le Clercq.epub
$file_name = Sprookjes van Planeet Ur - Grazia Hattem-Le Clercq.epub
Het jasje van Luis Martin - Gilles van der Loo.epub
La divina commedia - Dante Alighieri.epub
我需要获取第一个分隔符和扩展名之前的点之间的完整作者姓名。
我试图为此使用 preg_replace() ,它适用于这种情况,其中字符串中只有一个分隔符:
$author_name = preg_replace('/(.*)-(.*)\.epub/', '$2', $file_name);
Het jasje van Luis Martin - Gilles van der Loo.epub
La divina commedia - Dante Alighieri.epub
但不是当多个分隔符在字符串中时。
在我得到作者的名字后,我希望.epub 没有名字,所以我最终会得到这个结果:
原始.epub 文件:
$file_name = Bitcoin en andere cryptovaluta - Mary-Jane Lasterie-Janssen.epub
我需要的:
$author_name = Mary-Jane Lasterie-Janssen
$file_name = Bitcoin en andere cryptovaluta.epub
对此的任何帮助将不胜感激。
你可以使用类似的东西
$filename = 'Bitcoin en andere cryptovaluta - Mary-Jane Lasterie-Janssen.epub';
$author = "";
$filename = preg_replace_callback('~(.*) - (.*)\.epub~', function ($m) use (&$author)
{ $author = $m[2]; return $m[1] . ".epub"; }, $filename);
echo "Author = $author\nFilename = $filename";
// => Author = Mary-Jane Lasterie-Janssen
// Filename = Bitcoin en andere cryptovaluta.epub
请参阅PHP 演示。
正则表达式匹配如下:
(.*)
- 第 1 组:除换行符之外的任何零个或多个字符,尽可能多(因此,从开始到最后一次出现后续模式)-
空格、连字符、空格(.*)
- 第 2 组:除换行符之外的任何零个或多个字符,尽可能多\.epub
- .epub
字符串。 preg_replace_callback
function 用于“同时”用正则表达式替换并提取正则表达式匹配的一部分。 $author
被传递给匿名 function 用作带有&
前缀的替换参数,以便它可以被写入(重新分配)一个值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.