如何解决获取第一个分隔符和最后一个点之间的字符串
很抱歉,我是一个非常老的开发人员。 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 demo。
正则表达式匹配如下:
-
(.*)
- 第 1 组:除换行符以外的任何零个或多个字符,尽可能多(因此,从后续模式的开始到最后一次出现) -
-
- 空格、连字符、空格 -
(.*)
- 第 2 组:除换行符以外的零个或多个字符,尽可能多 -
\.epub
-.epub
字符串。
preg_replace_callback
函数用于“同时”替换正则表达式并提取正则表达式匹配的一部分。 $author
被传递给匿名函数,用作带有 &
前缀的替换参数,以便它可以被写入(重新分配)一个值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。