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
    消除)
  • 开头的部分后面跟着一个
    下划线
  • 下划线后跟一个整数(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

    我需要检查的原因是为了避免附加了
    的重复文件。

    $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在示例字符串中添加了。我更喜欢这个解决方案。谢谢!我更喜欢这个解决方案。谢谢!