1

PHPで文字列変数があるとしましょう: "This takes between 5 and 7 days"

整数でかかる時間に関するいくつかの賢明な情報を保存する必要があります。

結果が5になれば満足です。

数字以外の文字を削除しようとしましたが、57になります。

どうすればこれをより良い方法で行うことができますか?

4

4 に答える 4

4

preg_match正規表現を使用して最初の桁のグループを照合するために使用します。

$subject = 'This takes between 5 and 7 days';
if (preg_match('/\d+/', $subject, $matches)) {
    echo 'First number is: ' . $matches[0];
} else {
    echo 'No number found';
}

を使用すると、すべての数字グループ(およびこの例では)preg_match_allを一致させることができます。57

$subject = 'This takes between 5 and 7 days';
if (preg_match_all('/\d+/', $subject, $matches)) {
    echo 'Matches found:<br />';
    print_r($matches);
} else {
    echo 'No number found';
}
于 2012-06-17T22:56:03.033 に答える
1

数値を適切に定量化したい場合は、次のことをお勧めします。

<?php
$subject = "This takes between 5 and 7 days";

$dayspattern = '/\d+(\.\d+)? ?days?/';
$hourspattern = '/\d+(\.\d+)? ?hours?/'

$hours = -1;

if (preg_match($dayspattern , $subject, $matches) > 0)
{
  preg_match($dayspattern, $matches[0], $days);
  $hours = $days * 24;
} elseif (preg_match($dayspattern , $subject, $matches) > 0) {
  preg_match($hourspattern, $matches[0], $hours);
  $hours = $hours;
}

?>

次のことを考慮する必要があります。

  • 数字が見つからない場合、または数字が代わりにテキストとして指定されている場合はどうなりますか。
  • 誰かが「1日5時間」と言うとどうなりますか

うまくいけば、これはあなた自身で残りをするのに十分な情報をあなたに与えるでしょう。

于 2012-06-17T22:57:24.967 に答える
1

価格を抽出したい場合、つまり€7.50または$ 50などは、ここで正規表現が解決策になります。

 preg_match('/\d+\.?\d*/',$price_str,$matches); 
 echo $matches[0]; 

結果7.50または50

于 2013-07-03T07:09:38.660 に答える
-1

文字列を配列に分割して、件名を単語に分割します。次に、どういうわけか私は知りません、配列から単語を取り出します。たぶん、try-catchブロック内の配列のすべての子をループして、各要素をintタイプに変更しようとします。

for($i=0;$i<$words->length;$i++){
    try{
        $tempNum = (int)$words[$i];
    }catch($ex){
        $words->remove($i);
    }
}

またはそのようなもの。配列メソッドはどれもわかりませんが、私が言っていることはわかります。とにかく、$words配列には数字だけが含まれるようになりました。

于 2012-06-17T23:08:00.163 に答える