【问题标题】:Modify output of item from SimplePie using preg_replace使用 preg_replace 从 SimplePie 修改项目的输出
【发布时间】:2013-03-05 04:10:18
【问题描述】:

我正在使用 SimplePie 显示来自 RSS 提要的第一个项目的标题,该提要在我被要求监控的立法机构中的账单发生问题时更新。这个立法机构发布 RSS 提要,我可以使用 SimplePie 获取并显示给需要信息的人。 SimplePie 代码完美地完成了它的工作。

但是,我想在使用 preg_replace 回显输出之前对其进行修改,以对其进行一些清理。

我原来的 SimplePie 代码如下:

<?php $max = $feed->get_item_quantity(1); 
      for ($x = 0; $x < $max; $x++): 
          $item = $feed->get_item($x); 
?>
<?php echo $item->get_title(); ?>
<?php endfor; ?>

我试过用这个:

<?php $max = $feed->get_item_quantity(1); 
      for ($x = 0; $x < $max; $x++): 
          $item = $feed->get_item($x); ?>
<?php $str = '/([0-9]+) &#8211;/'; 
      $str = preg_replace('/([0-9]+) &#8211;/', '', $str); 
?>
<?php echo $item->get_title(); ?>
<?php endfor; ?>

...但它没有修改我的输出。它似乎没有做任何事情。我没有收到错误,但它不起作用。

当前的实际输出(只是一个项目标题)如下所示:

07 - 2013 年 3 月 1 日 - 提交给规则委员会进行二读。

开头的两位数是无关信息。我想消除它和它后面的连字符,所以标题会是这样的:

2013 年 3 月 1 日 - 提交规则委员会二读。

虽然,理想情况下,我认为它应该是这样的:

(2013 年 3 月 1 日)提交规则委员会二读。

关于如何完成这项工作的建议?

【问题讨论】:

    标签: php preg-replace


    【解决方案1】:

    请试试这个:-

    $str = '07 – March 1, 2013 – Passed to Rules Committee for second reading.'; 
    $str = preg_replace('/(^[0-9]+) –/', '', $str);
    echo $str;
    

    输出:-

     March 1, 2013 – Passed to Rules Committee for second reading.
    

    您的代码:-

        <?php $max = $feed->get_item_quantity(1); 
              for ($x = 0; $x < $max; $x++): 
                  $item = $feed->get_item($x); ?>
        <?php $str = '/([0-9]+) &#8211;/';  <<======= your title string is regular expression here
              // assign your title string here  
              $str = preg_replace('/([0-9]+) &#8211;/', '', $str); 
        ?>
        <?php echo $item->get_title(); ?>
        <?php endfor; ?>  
    

    更新代码:-

        <?php 
                    $max = $feed->get_item_quantity(1); 
                    for ($x = 0; $x < $max; $x++): 
                            $item = $feed->get_item($x); 
                            $title_str = $item->get_title();
                            $title = preg_replace('/(^[0-9]+) –/', '', $title_str); 
    
                            $pattern = '/(\w+) (\d+), (\d+)/i';
                            $replacement = '(${1} 1, $3)';
                            $title = preg_replace($pattern, $replacement, $title);  
                            echo $title;  
                    endfor; 
         ?>
    

    对于您想要的输出:-

    $string = 'March 1, 2013 - Passed to Rules Committee for second reading.';
    $pattern = '/(\w+) (\d+), (\d+)/i';
    $replacement = '(${1} 1, $3)';
    echo preg_replace($pattern, $replacement, $string);
    

    输出:-

      (March 1, 2013) – Passed to Rules Committee for second reading.
    

    【讨论】:

    • 试过了(必须把连字符变成一个连字符),它可以工作!你会推荐什么正则表达式在日期周围加上括号,这样它看起来像这样? (2013年3月1日)提交规则委员会二读
    【解决方案2】:

    需要像这样修改你的代码,你使用的 $str 应该包含你想要修改的字符串。

    <?php $max = $feed->get_item_quantity(1); 
          for ($x = 0; $x < $max; $x++): 
              $item = $feed->get_item($x); 
     echo preg_replace('/([0-9]+) &#8211;/', '', $item->get_title()); ?>
    <?php endfor; ?>
    

    【讨论】:

      猜你喜欢
      • 2011-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      • 2013-10-05
      • 1970-01-01
      • 2015-07-25
      相关资源
      最近更新 更多