Php 从末尾查找字符串模式
我正在尝试查找字符串的格式是否为Php 从末尾查找字符串模式,php,Php,我正在尝试查找字符串的格式是否为\u 0.pdf,即 查找它是否以.pdf结尾(可以使用rtrim消除) 开头的部分后面跟着一个下划线 下划线后跟一个整数(0、1、2、…,等等) 实现这一目标的最佳方式是什么?我尝试了字符串函数的组合strpos(以找到位置。但从字符串末尾开始无法执行任何操作)。 任何提示都将不胜感激 编辑: 示例字符串: public://Big_Data_Tutorial_part4_0.pdf public://Big_Data_Tutorial_part4_1.pdf
\u 0.pdf
,即
.pdf
结尾(可以使用rtrim
消除)
下划线strpos
(以找到位置。但从字符串末尾开始无法执行任何操作)。任何提示都将不胜感激 编辑:
示例字符串:
public://Big_Data_Tutorial_part4_0.pdf
public://Big_Data_Tutorial_part4_1.pdf
public://Big_Data_Tutorial_part4_3.pdf
我需要检查的原因是为了避免附加了
的重复文件。$str=''u0.pdf';
$str = '<initial_part_of_name>_0.pdf';
$exploded = explode('.', $str);
echo $exploded[1];
$spolded=分解('.',$str);
echo$爆炸[1];
$str=''u 0.pdf';
$spolded=分解('.',$str);
echo$爆炸[1];
这可以使用正则表达式来完成。差不多
^[0-9A-Za-z]+\\\u[\ d]\.pdf$
实施:
$filename = '<initial_part_of_name>_0.pdf';
if(preg_match('/^[0-9A-Za-z]+\_[\d]\.pdf$/i', $filename)){
// name pattern Matched
}
这可以使用regex完成。差不多
^[0-9A-Za-z]+\\\u[\ d]\.pdf$
实施:
$filename = '<initial_part_of_name>_0.pdf';
if(preg_match('/^[0-9A-Za-z]+\_[\d]\.pdf$/i', $filename)){
// name pattern Matched
}
您可以使用preg\u match()
函数来匹配模式
检查功能
preg\u match(“/(*)\ud+\.pdf$/”、“\u 0.pdf”、$arr);
在$arr[1]
中,您将获得
在$arr[2]
中,您将获得下划线后的数字您可以使用preg\u match()
函数来匹配模式
检查功能
preg\u match(“/(*)\ud+\.pdf$/”、“\u 0.pdf”、$arr);
在$arr[1]
中,您将获得
在$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";
}
一种非数组和正则表达式方法
$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";
}
@如果数组从0开始,而不是从1开始,那么如果文件名中有另一个点,0确实是唯一的问题。很抱歉,无法取消删除注释。我不能用这个,因为字符串中可能有点。此外,它也无助于匹配模式。@如果数组从0开始,而不是从1开始,那么如果文件名中有另一个点,则唯一的问题可能是0。很抱歉,无法取消删除注释。我不能用这个,因为字符串中可能有点。此外,它也无助于匹配模式。如果名称为Big\u Data\u Tutorial\u part4\u 0.pdf,则会失败。第二个解决方案不会失败。试试看。如果名称是Big\u Data\u Tutorial\u part4\u 0.pdf
Second solution不会失败,则失败。试试看。如果你只想检查字符串是否与该模式匹配,那么你可以像这样检查(preg_match(“/(.*))\.pdf$/”,“_450a.pdf”){…}如果你只想检查字符串是否与该模式匹配,那么你可以像这样检查(preg_match(“/(.*)\)\.pdf$/”,“_450a.pdf”){…}初始部分看起来像什么??你能举几个完整的例子让模式更清晰吗???@Andrew在示例字符串中添加了。初始部分是什么样子的??你能给出几个完整的例子让模式更清晰吗???@Andrew在示例字符串中添加了。我更喜欢这个解决方案。谢谢!我更喜欢这个解决方案。谢谢!