【问题标题】:separate a string from some specific words in php将字符串与php中的某些特定单词分开
【发布时间】:2014-08-21 13:21:57
【问题描述】:

我有一个名为 $metar 的字符串

 $metar = EICK 011300Z 10004KT 27/17 Q1018 TEMPO AT0800 20006KT 010V220 9999 SCT029

根据动态文件,此字符串可能每小时更改一次。

基本上,我想将 $metar 分隔为两个字符串,分隔点是“AT0800”

list($a, $b) = explode(' AT0800 ', $metar);
echo $b;

但问题是“AT0800”将来可能会更改为“AT1200”或“AT1900”,唯一的单词是“AT”,那么我怎样才能得到单词后面的字符串$b “ATxxxx”?谢谢

【问题讨论】:

  • ATXXXX 数字可以像 ATXXXXXXXXX 一样变化,还是这个静态的 4 位数字? ATXXXX 排在第 7 位,还是会像 EICK ATXXXX 011300Z 27/17 一样发生变化 ..?
  • 如果 ATXXXX 总是有相同的模式,你可以创建一个子字符串。
  • Pilot here - 为澄清起见,AT0800 中的 0800 是 0800 Zulu - 24 小时制。所以范围是00002399。总是 4 位数字。

标签: php string explode


【解决方案1】:

使用正则表达式将字符串与AT#### 分开:

$metar_split = preg_split('/AT[0-9]{4}/', $metar);

上半场:

echo trim($metar_split[0]);

下半场(你要找的那个):

$b = trim($metar_split[1]);

要获得AT#### 部分:

preg_match('/AT[0-9]{4}/', $metar, $matches);
$metar_at = $matches[0];

【讨论】:

    【解决方案2】:

    如果 ATxxxx 在字符串中的位置始终是固定的(并且它之前的字符数也是固定的),并且 xxxx 始终表示 4 位数字,那么您可以直接使用 substr 选择所需的段字符串,如:

    $part1 = substr($metar, 0, 38);
    $part2 = substr($metar, 46);
    

    但是,如果您正在查看其他内容的不同长度,但需要使用 ATxxxx 格式,您可以使用如下行的正则表达式来处理它:

    ([\w\s\/]+) AT[0-9]{4} ([\w\s\/]+)
    

    这将取出您的两个部分,它们由字母 AT 和正好 4 位数字分隔。 [\w\s\/]+ 部分说:“抓住我的单词字符(字母和数字)、空格和斜线字符至少一个,或者更多”。

    【讨论】:

      【解决方案3】:

      给你,答案附在下面:

             list($a, $b) = explode('AT', $metar, 2);
              //echo $b;
              list($c, $d) = explode(' ', $b, 2);
              //echo $d;
      

      【讨论】:

      • 这是一种相当迂回的方式。几天后,在你接受这个作为你的答案之前,试试我的新编辑。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多