如何操纵时间数学中使用的文本

时间:2019-02-14 15:28:53

标签: php

我想操纵以下字符串

$str = "3 year 2 month week day 2 hour 12 minute 60 second";

将非数字(例如,将week更改为1 week,将day更改为1 day,然后对所有数字都加上减号,使字符串像

$str = "-3 year -2 month -1 week -1 day -2 hour -12 minute -60 second";

如何实现这一目标!

另一个例子

$str = "2 year month day";

$str = "-2 year -1 month -1 day";

3 个答案:

答案 0 :(得分:2)

在此,最好使用 regexp替换

1。首先,在每个未加数字([0-9])的单词前加1:

$str = preg_replace("/(^|[^0-9]\s)([A-Z])/i", "$1 1 $2", $str);

详细信息:

  • (^|[^0-9]\s)([A-Z]) :所有字母({{1}是检索捕获(因为它被()包围) }})之前是行首(([A-Z]))或数字后面是空白(^),也被删除了;这是我们如何检测数字之前没有的单词的方法;
  • [^0-9]\s :执行不区分大小写的检索(无需编写 [A-Za-z] )) 然后在一系列数字之前加上减号;
  • /i :写下捕获的图形("$1 1 $2"),空格,1图形和字母序列($1

2。然后,在所有数值之前加上减号$2

-

在这里,$str = preg_replace("/[0-9]+/", "-$0", $str); 包含整个匹配的字符串。

工作示例:

$0

输出:

$str = "year 2 month week day 2 hour 12 minute 60 second";
echo $str . "<br/>";
$str = preg_replace("/(^|[^0-9]\s)([A-Z])/i", "$1 1 $2", $str);
echo $str . "<br/>";
$str = preg_replace("/[0-9]+/", "-$0", $str);
echo $str . "<br/>";

奖金:一次通话的备用版本:

year 2 month week day 2 hour 12 minute 60 second
1 year 2 month 1 week 1 day 2 hour 12 minute 60 second
-1 year -2 month -1 week -1 day -2 hour -12 minute -60 second

答案 1 :(得分:0)

这里是一种方法,将其在空格字符处分成多个部分,然后检查每个单独部分是否为数字,然后“回头看”前面的部分,以确定是否为以下情况之一:我们只有一个没有任何值的“单位”。

请注意,这仅适用于您显示的非常严格的格式;缺少空格或类似内容可能会使它损坏。

<?php

$str = "3 year 2 month week day 2 hour 12 minute 60 second";

$parts = explode(' ', $str); // split at space
$result = [];
$prevPartWasNum = false; // flag to remember if the previous part was numeric or not
foreach($parts as $part) {
  if(is_numeric($part)) { // if the part is numeric, we need to check whether to add -
    $result[] = ($part < 0 ? '' : '-') . $part;
    $prevPartWasNum = true;
  }
  else {
    if($prevPartWasNum) { // if the previous part was nummeric, we can add straight away
      $result[] = $part;
    }
    else { // otherwise we have to introduce the additional -1
      $result[] = '-1 ' . $part;
    }
    $prevPartWasNum = false;
  }
}
echo implode(' ', $result);

答案 2 :(得分:0)

这是一个示例:

$keywords = array('year','week','month','day','hour','minute','second');

$str = "3 year 2 month week day 2 hour 12 minute 60 second";
$str = str_replace(' ', '', $str);

foreach($keywords as $keyword){
    if($pos=strpos($str,$keyword)){
        if(is_numeric($str[$pos-1]) ==0){
            $str= substr($str, 0 ,$pos ).'1'.substr($str,$pos,strlen($str));
        }
    }
}



$str = preg_replace('([0-9]+)' , ' -$0 ',$str);
echo $str;

结果:

 -3 year -2 month -1 week -1 day -2 hour -12 minute -60 second