I would like to get substring:
myPhotoName
from the below string:
path/myPhotoName_20170818_111453.jpg
using PHP preg_match function.
Please may somebody help me?
Thank you.
Preg_match from / to _.
$str = "blur/blur/myPhotoName_20170818_111453.jpg";
Preg_match("/.*\/(.*?)_.*(\..*)/", $str, $match);
Echo $match[1] . $match[2];
I use .*? to match anything between the slash and underscore lazy to make sure it doesn't match all the way to the last underscore.
Edited to make greedy match anything before the /
Since it's such a simple pattern you can also use normal substr with strrpos.
Edited to use strrpos to get the last /
$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;
My conclusion
Regex is not suitable for this type of job as it's way to slow for such a simple substring pattern.
Do like this:
<?php
$arr = "path/myPhotoName_20170818_111453.jpg";
$res = explode('_',explode('/',$arr)[1])[0];
print_r($res);
?>
Use explode function in place of preg_match for easily get your expected output. And using preg_match, do like this:
<?php
$img = "path/myPhotoName_20170818_111453.jpg";
preg_match("/path\/(.+)\_[0-9]*\_[0-9]*\.jpg/", $img, $folder);
print_r($folder[1]);
?>
This is what you need. Thanks to regex101.com you can now test all possible matches.
$content = "path/myPhotoName_20170818_111453.jpg";
preg_match('/path\/(.*?)_/', $content, $match);
echo $match[1];
#Output --> myPhotoName;
Match string will be in array which can be printed by using print_r($match);
preg_match('/myPhotoName/', $str);but I think this is not the case. I don't know what are you trying to do.