• ベストアンサー

その文字までは何文字?

その文字までは何文字? 例えば、「2010年5月30日」という文字列から 年と月 を取り出したい場合にはどのようにすれば良いのでしょうか?(12月でも取り出せるようにしたいのです)。 ご教授頂きたく思います。よろしくお願いします。 (phpにエクセルでいうところのSEARCH関数のようなものはないでしょうか?そうすればすぐに上記のような事も問題なく行えそうなのですが、思いつく単語で検索してみましたが見つけることは出来ませんでいした。)

質問者が選んだベストアンサー

  • ベストアンサー
  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.1

PHP には標準関数が豊富にあるので、まずはざっとマニュアルを眺めてみてください。 http://jp.php.net/manual/ja/function.strpos.php 単純に文字列として扱うなら、文字列関数もいいですが、日付/時刻の妥当性などを考えると、日付関数をオススメします。 http://jp.php.net/manual/ja/book.datetime.php ついでに、 もし正規表現を使うなら、preg_match などシングルバイト関数を使いたがる人が多いみたいですが、全角文字が含まれている場合は、mb_ereg などマルチバイト関数の使用をオススメします。

goo2408
質問者

補足

書き込みありがとうございます。 日付を作ることは簡単にできるようですが、その逆ができないのですが、方法はないのでしょうか。

その他の回答 (2)

  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.3

date_default_timezone_set('Asia/Tokyo'); $date = DateTime::createFromFormat('Y年n月j日', '2010年5月30日') or die(); $year = $date->format('Y'); $month = $date->format('m'); $date_info = getdate($date->getTimestamp()); ちなみに、SEARCH関数 の代替になるのは、strpos

goo2408
質問者

お礼

再度の書き込みありがとうございました。 なんとか対応できました。 ありがとうございました。

  • smileeeen
  • ベストアンサー率70% (21/30)
回答No.2

No.1さんが仰っているように正規表現を使うことで取り出すことができます。 ---------- $day = '2010年5月30日'; mb_ereg('^(\d{4})年(\d{1,2})月', $day, $match); // 年の表示 echo $match[1]; // 月の表示 echo $match[2]; ---------- ・正規表現の簡単な解説 ^ ⇒ 文字列の先頭を意味します。 \d ⇒ 数値文字列を意味します。 {4} ⇒ 直前の文字が4文字続く事を意味します。 {1,2} ⇒ 直前の文字列が1文字~2文字続く事を意味します。 () ⇒ 括弧で括った内部の正規表現にマッチした文字列がmb_ereg関数の第三引数(上記の場合$match)に格納されます。 $match[0]にはマッチした文字列全体が格納されるので、年の部分は1つ目の括弧で括られているので$match[1]、月の部分は2つ目の括弧で括られているので$match[2]で取り出すことができます。 ただし上記のプログラムの場合、例えば「0958年39月0125日」などといった存在しない日付に関してもマッチしていまいます。 より厳密に判定する場合は正規表現部分を修正する必要があります。 正規表現は奥が深いですが、色々と使いどころがあるので少しずつ学んでいくといいと思います。 ・mb_ereg関数 http://php.net/manual/ja/function.mb-ereg.php ・サルにもわかる正規表現入門 http://www.mnet.ne.jp/~nakama/

goo2408
質問者

お礼

書き込みありがとうございます。 正規表現は多少かじる程度は把握しているのですが、少し複雑になるとどうにも理解が困難だったり、しばらく使っていないと完全に忘れてしまったりして、ほとんどどこかのHPのコピーペーストに頼っています。 これを機会にまた少し取り組んでみます。 ありがとうございました。

関連するQ&A