PHPで文字列変数があるとしましょう: "This takes between 5 and 7 days"
整数でかかる時間に関するいくつかの賢明な情報を保存する必要があります。
結果が5になれば満足です。
数字以外の文字を削除しようとしましたが、57になります。
どうすればこれをより良い方法で行うことができますか?
PHPで文字列変数があるとしましょう: "This takes between 5 and 7 days"
整数でかかる時間に関するいくつかの賢明な情報を保存する必要があります。
結果が5になれば満足です。
数字以外の文字を削除しようとしましたが、57になります。
どうすればこれをより良い方法で行うことができますか?
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
を一致させることができます。5
7
$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';
}
数値を適切に定量化したい場合は、次のことをお勧めします。
<?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;
}
?>
次のことを考慮する必要があります。
うまくいけば、これはあなた自身で残りをするのに十分な情報をあなたに与えるでしょう。
価格を抽出したい場合、つまり€7.50または$ 50などは、ここで正規表現が解決策になります。
preg_match('/\d+\.?\d*/',$price_str,$matches);
echo $matches[0];
結果7.50または50
文字列を配列に分割して、件名を単語に分割します。次に、どういうわけか私は知りません、配列から単語を取り出します。たぶん、try-catchブロック内の配列のすべての子をループして、各要素をint
タイプに変更しようとします。
for($i=0;$i<$words->length;$i++){
try{
$tempNum = (int)$words[$i];
}catch($ex){
$words->remove($i);
}
}
またはそのようなもの。配列メソッドはどれもわかりませんが、私が言っていることはわかります。とにかく、$words
配列には数字だけが含まれるようになりました。