【问题标题】:Preg_replace with regex and forward slashPreg_replace 用正则表达式和正斜杠
【发布时间】:2015-09-10 02:16:26
【问题描述】:

代码如下:

$string = "/My-Item-Here-p/sb-p36abbg.htm";
$str = preg_replace('/^.*-p\s*/', '', $string);
$str = substr($str, 1);
echo $str;

这吐出6abbg.htm,我希望它只删除“-p/”之前的所有内容(包括正斜杠)。

所以我希望它吐出sb-p36abbg.htm

【问题讨论】:

  • preg_replace 是必须的吗?还是您愿意接受其他选择?
  • 然后添加。如果您不想保留分隔符,请转义。
  • 您只需要echo basename($string);
  • 如果源字符串中有 2 个或更多 -p/ 实例怎么办?你想保留最小的还是更大的子串?
  • 总是只有一个-p/的实例

标签: php regex preg-replace


【解决方案1】:

试试这个正则表达式:/^.*-p\/(.*)$/

<?php
$sourcestring="/My-Item-Here-p/sb-p36abbg.htm";
echo preg_replace('/^.*-p\/(.*)$/','\1',$sourcestring);
?>

Codepad link.

【讨论】:

    【解决方案2】:

    我认为您没有理由在这种特定情况下使用正则表达式。只需使用strpossubstr

    $string = "/My-Item-Here-p/sb-p36abbg.htm";
    $str = substr($string, strpos($string, '-p/') + 3);
    echo $str;
    

    考虑到在不需要的地方使用正则表达式会浪费计算资源。

    【讨论】:

      【解决方案3】:
      $string = "/My-Item-Here-p/sb-p36abbg.htm";
      $str = preg_replace('/^.*?(?=-p\/)', '', $string);
      

      【讨论】:

        猜你喜欢
        • 2011-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-01
        相关资源
        最近更新 更多