我正在尝试查找字符串的格式是否为<initial_part_of_name>_0.pdf
,即
- 查找它是否以
.pdf
结束(可以使用rtrim
消除) - 初始部分后面跟着一个
_
下划线 - 下划线后面跟一个整数(0、1、2、…等)
实现这一目标的最佳方式是什么?我尝试了字符串函数strpos
的组合(以查找位置。但无法从字符串末尾执行任何操作)
任何建议都将不胜感激!
编辑:
示例字符串:public://Big_Data_Tutorial_part4_0.pdf
public://Big_Data_Tutorial_part4_1.pdf
public://Big_Data_Tutorial_part4_3.pdf
我需要检查的原因是为了避免附加_<number>
存储的重复文件。
您可以使用preg_match()
函数来匹配图案
检查函数preg_match()
preg_match("/(.*)_('d+)'.pdf$/", "<initial_part_of_name>_0.pdf",$arr);
在$arr[1]
中,您将获得<initial_part_of_name>
在$arr[2]
中,您将获得下划线
非数组和正则表达式方式
$str1 = "public://Big_Data_Tutorial_part4_0a.pdf"; // no match because 0a
$str2 = "public://Big_Data_Tutorial_part4_1.pdf"; // match
$str3 = "public://Big_Data_Tutorial_part4_3.pdf"; // match
$last_part = strrchr($str1, "_");
if (trim(strstr($last_part, ".", true), "_0..9") == "" && strstr($last_part, ".") == ".pdf") {
echo "match";
}
$str = '<initial_part_of_name>_0.pdf';
$exploded = explode('.', $str);
echo $exploded[1];
这可以使用regex来完成。类似的东西
^[0-9A-Za-z]+'_['d]'.pdf$
实施:
$filename = '<initial_part_of_name>_0.pdf';
if(preg_match('/^[0-9A-Za-z]+'_['d]'.pdf$/i', $filename)){
// name pattern Matched
}
解决方案2
使用pathinfo()
$filename = '<initial_part_of_name>_0.pdf';
$path_parts = pathinfo($filename);
if(strtolower($path_parts['extension']) == 'pdf') {
if(preg_match('/.*_['d]$/', $path_parts['filename'])){
// name pattern Matched
}
} else {
// Not a PDF file
}