【问题标题】:formatting string for an array数组的格式化字符串
【发布时间】:2018-12-05 03:18:16
【问题描述】:

我一直在寻找如何准备字符串以将它们解析为数组的方法。

Nissan Micra 1.2dm3 80KM 2015r. 103 000km 
Hyundai Tucson 2dm3 141KM 2005r. 199 000km 
Volkswagen Passat 2dm3 140KM 2014r. 138 000km 
Nissan Note 1.4dm3 88KM 2007r. 120 000km 

看起来很简单,用“”分割字符串就完成了,但是,可能还有一些“Land Rover Range Rover”和其他长名称,而且经过km也会被分割,所以idk如何处理。每次循环解析字符串,因此我的脚本将检查内部是否有任何“双字+名称”可以正确使用它们,或者是否存在任何其他方式将这些字符串正确拆分为数组?

【问题讨论】:

  • 你能告诉我们想要的结果吗? dm3r.等字符串是固定的吗?
  • 看起来你可以在“空格+数字”上拆分
  • @YongQuan 应该是 array('Nissan', 'Micra', '1.2', '80', '2015','103000') 等
  • @IdontDownVote hm,你给我猜一下如何用 strpos 和 substr 传递这个,谢谢!

标签: php arrays string


【解决方案1】:

这不是一个好问题。通常,您应该表现出自己解决问题的一些努力。下次请记住这一点。然而,假设文本的格式是一致的,这很容易用正则表达式解决。

$text = "Nissan Micra 1.2dm3 80KM 2015r. 103 000km";
$result = preg_match("/(.*?) ([\d.]+dm3) (\d+KM) (\d+r.) ([\d ]+km)/", $text, $matches);
var_dump($matches);

输出:

array(6) {
  [0] =>
  string(41) "Nissan Micra 1.2dm3 80KM 2015r. 103 000km"
  [1] =>
  string(12) "Nissan Micra"
  [2] =>
  string(6) "1.2dm3"
  [3] =>
  string(4) "80KM"
  [4] =>
  string(6) "2015r."
  [5] =>
  string(9) "103 000km"
}

演示:https://regex101.com/r/gY0HeK/1

如果您不需要 km 或 dm 等单位3,您可以随时将它们放在括号外,例如 ([\d.]+)dm3([\d ]+)km 等。

【讨论】:

    【解决方案2】:

    好的,我为我的问题找到了解决方案。 1. 品牌列表。按列表检查字符串并将其从字符串中删除 2.从最后传递参数:传递km,hp等,用preg_replace字母删除(我只需要那些数字)并从字符串中删除它们 3. 字符串中只剩下模型名称,所以我不需要所有模型的长列表来检查模型

    希望它能帮助像我一样被问题困扰的人

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-10
      • 2014-01-09
      • 1970-01-01
      • 1970-01-01
      • 2011-02-09
      相关资源
      最近更新 更多