繁体   English   中英

获取第一个分隔符和最后一个点之间的字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM