【问题标题】:Ignoring second instance of preg_replace忽略 preg_replace 的第二个实例
【发布时间】:2016-10-18 02:31:20
【问题描述】:

我正在做一个生成随机数据的网络抓取。

随机数据格式的字符串是RestaurantJimmys Outdoor Grill

我有一个preg_replace 来删除餐厅并保留标题。

但是,当名称为RestaurantSmith Family Restaurant 时,它会变成Smith Family

保留第二个实例的最佳解决方案是什么?

代码:

preg_replace('/Restaurant/', '', $restaurantName);

提前致谢!

【问题讨论】:

  • Restaurant 的第一个实例是否总是与下一个字符串无空格连接?
  • @RaxWeber 没错。
  • Restaurant出现在字符串的开头时,它应该被删除吗?

标签: php regex web-scraping preg-replace


【解决方案1】:

我尝试了两种可行的方法:

$str = "RestaurantSmith Family Restaurant";

echo preg_replace("/Restaurant(\w+)/", "$1", $str);

和:

echo preg_replace("/Restaurant\B/", "", $str);

【讨论】:

  • 谢谢先生!我很感激!
  • 如果第一个餐厅后面有空格怎么办? =P
  • @MarcelJacquesMachado 显然 OP 说它后面没有任何空间。
【解决方案2】:

试试这个,看看是否有帮助:

 <?php
 echo preg_replace('/Restaurant/u', '', "RestaurantSmith Family  Restaurant", 1);
 ?>

其实,

  • u 用于 UTF-8 文本。

【讨论】:

  • 不幸的是,我得到了一个RestaurantSmith Family 输出。
  • 哦,让我看看
【解决方案3】:

或者你可以这样做:

$text = 'RestaurantSmith Family Restaurant';
$pattern = '/^Restaurant/';
$replacement = '';
echo preg_replace($pattern, $replacement, $text);

^ 用于指示文本的开头。所以只会替换第一次出现的餐厅。

【讨论】:

  • 如果餐厅不在字符串的开头怎么办?然后就不行了。
  • 这是在哪里说的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-14
  • 2018-08-13
  • 2018-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多