/([0-9]+)\s*(hours?|minutes?|seconds?|mins?|secs?)/i
単純に次のように置き換え$1 $2
ます。
<?php
$string = "I walked for 2hours and 45 mins to get there";
$string = preg_replace("/([0-9]+)\s*(hours?|minutes?|seconds?|mins?|secs?)/i", "$1 $2", $string);
var_dump($string);
//string(45) "I walked for 2 hours and 45 mins to get there"
?>
デモ
これはうまくいくでしょう
時
時
分
分
分
分
秒
秒
秒
秒
大文字の使用 (ただし、などに置き換えませんmins
minutes
)
または、本当に別のトークン (分から分など) に置き換えたい場合は、次を使用しますpreg_replace_callback
。
<?php
function replaceTimes($matches) {
$times = array(
"hour" => array("hour"),
"minute" => array("min", "minute"),
"second" => array("sec", "second")
);
$replacement = $matches[1] . " " . $matches[2];
foreach ($times as $time => $tokens) {
if (in_array($matches[2], $tokens)) {
$replacement = $matches[1] . " " . $time . ($matches[1] != "1" ? "s" : "");
break;
}
}
return $replacement;
}
$string = "I walked for 2hours and 45 mins to get there as well as 1 secs to get up there";
$string = preg_replace_callback("/([0-9]+)\s*(hour|minute|second|min|sec)s?/i", "replaceTimes", $string);
var_dump($string);
?>
これにより、トークンの末尾の「s」とその他すべてが自動的に修正されます。
string(84) 「そこに着くのに 2 時間 45 分歩き、そこに着くのに 1 秒かかりました」
デモ