1

私は2つの異なる文字列を持っています:

  • 赤ちゃん 14% 2012.07.28
  • こんにちは 2% 15.06.16 テン

(「baby」or「14%」or「ten」は変化するので指定できません)

その文字列内の日付を認識したいので、次を試しました:

$dt = date_parse($string);

最初のケースでは問題ありませんが、2 番目のケースでは日付が認識されません。

私は成功しなかった

$dt = date_parse_from_format("d.m.Y", $string);

そして、 preg_match または preg_match_all を試してみましたが、成功しませんでした (私はあまり得意ではありません)。

4

3 に答える 3

6

たとえば、正規表現で日付をキャッチできます。

if(preg_match('/(.*)([0-9]{2}\.[0-9]{2}\.[0-9]{2,4})(.*)/', $yourString, $matches))
{
 $date = $matches[2];
}
于 2012-12-18T11:23:12.407 に答える
2

ベイビー、14%、テンは変わることができるとおっしゃいましたね。しかし、それは常に単一の単語/値ですか? もしそうなら、あなたは使うことができます:

$split = explode(' ', $string)
$date = $split[2];

//$split[0] = Baby
//$split[1] = 14%
//$split[2] = 28.07.2012

//$date = 28.07.2012

//$split[0] = Hello
//$split[1] = 2%
//$split[2] = 15.06.16
//$split[3] = Ten

//$date = 15.06.16
于 2012-12-18T11:25:30.677 に答える
0

私はaurel.gの答えが好きで、自分の目的のためにそれをいくつか拡張しました。特に、Excel が適切な日付を変換し続ける 2 桁の年を処理したかったのです。また、strtotime() を使用して、日付が 2 段 (2014 年 6 月 32 日など) の場合に FALSE を返しました。これが役立つかもしれないと思いました(そして、これを上記のコメントとして投稿する方法が見つかりませんでした、申し訳ありません):

$result = preg_match("/^(.*)(\d{1,2}\/\d{1,2}\/\d{2,4})(.*)/",$date, $matches);
// use strtotime() to test if that's a valid date:
if ($result && strtotime($matches[2]) {
  // convert it back to the date in the desired format:
  return date('m/d/Y',strtotime($matches[2]));
}
于 2014-08-30T02:19:04.893 に答える