通过使用PHP preg_match,如何从字符串中获取特定的子字符串

时间:2017-08-18 05:14:05

标签: php regex preg-match

我想获得子串:

myPhotoName

来自以下字符串:

path/myPhotoName_20170818_111453.jpg

使用PHP preg_match函数。

请有人帮帮我吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

Preg_match from / to _。

$str = "blur/blur/myPhotoName_20170818_111453.jpg";
Preg_match("/.*\/(.*?)_.*(\..*)/", $str, $match);

Echo $match[1] . $match[2];

我使用.*?匹配斜线和下划线之间的任何内容,以确保它与最后一个下划线不匹配。
编辑在/

之前进行贪婪匹配

https://3v4l.org/9oTuj

正则表达式的表现:
enter image description here


由于它是如此简单的模式,你也可以使用普通的substr与strrpos 编辑使用strrpos获取最后一个/

$str = "blur/blur/myPhotoName_20170818_111453.jpg";
$pos = strrpos($str, "/")+1; // position of /
$str = substr($str, $pos, strpos($str, "_")-$pos) . substr($str, strpos($str, "."));
// ^^ substring from pos to underscore and add extension

Echo $str;

https://3v4l.org/d411c

子串的执行:
enter image description here

  

我的结论
  正则表达式不适合这种类型的工作,因为它可以减缓这种简单的子串模式。

答案 1 :(得分:1)

这样做:

<?php
$arr = "path/myPhotoName_20170818_111453.jpg";
$res = explode('_',explode('/',$arr)[1])[0];
print_r($res);
?>

使用explode函数代替preg_match可以轻松获得预期的输出。 使用preg_match,请执行以下操作:

<?php
$img = "path/myPhotoName_20170818_111453.jpg";
preg_match("/path\/(.+)\_[0-9]*\_[0-9]*\.jpg/", $img, $folder);
print_r($folder[1]);
?>