拆分字符串以使用PHP收集数据

时间:2017-01-04 15:30:16

标签: php regex split

我需要将此字符串拆分为不同的部分以收集特定数据,以便我可以使用PHP将其存储在数据库中。 我正在帮助分割或使用正则表达式来可靠地收集这些数据。 并非所有的值都是相同的长度,因此需要一种方法来测试每个部分而不仅仅根据字符位置进行拆分。

Sol 1565 (Dec 31, 2016): Sunny, high -6C/21F, low -72C/-97F, pressure at 8.74 hPa, daylight 06:25-18:41

我想获得这些单独的值:

  • Sol 1565(这将始终以Sol开头,后面跟一个4位数字)
  • 2016年12月31日(日期格式将始终为M d,Y)
  • Sunny(将始终使用一个单词,但可能不是同一个单词)
  • -6C [high](C中的高温)
  • 21F [high](F中的高温)
  • -72C [low](C中的低温)
  • -97F [low](F中的低温)
  • 8.74(压力 - 将是浮动)
  • 06:25(白天开始)
  • 18:41(白天结束)

编辑: 我尝试过使用substr,但很快就发现它不可靠。因此,在一个更合适的解决方案之后。

1 个答案:

答案 0 :(得分:1)

首先,您必须了解正则表达式语法,然后才能轻松完成。以下是参考:http://php.net/manual/en/regexp.introduction.php

我做了一个让你明白的。希望你能做到最后。

<?php
$pattern = '@(high\s)([-+/0-9a-zA-Z]+)@';
$subject = 'Sol 1565 (Dec 31, 2016): Sunny, high -6C/21F, low -72C/-97F, pressure at 8.74 hPa, daylight 06:25-18:41';
$result = preg_match( $pattern, $subject , $matches );
print_r($matches);

结果:

Array
(
    [0] => high -6C/21F
    [1] => high 
    [2] => -6C/21F
)

您将获得高价值$matches[2]。然后你可以使用explode()获得C和F.

我正在展示一个部分解决方案。您可以在阅读正则表达式语法后应用替代模式。