• ベストアンサー

その文字までは何文字?

その文字までは何文字? 例えば、「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

  • エクセルの関数で文字列の変換をするには

    エクセルの関数で文字列の変換をするにはどうしたらよろしいでしょうか 問題の関数はこちらです 2008/10/10(金) を 平成20年10月10日金曜日 に変換する 御解答宜しくお願い致します

  • 文字列から文字列を検索するプログラム

    現在、C言語を学習しています。 文字列から文字列を検索する関数に「strstr]がありますが、自作関数として自分で作成する方法を考えております。 文字列から文字を検索する事は出来たのですが、文字列を検索するシーケンスがわかりません。 有識者の方、御教授よろしく御願い致します。

  • Accessで文字列検索

    Accessであるテキストボックスに入ってるデータから任意の文字列の位置を知りたくて、 関数を使ってみました。 使った関数はFINDとSEARCHですがどちらもダメでした。 Accessで使える文字列検索関数はないのでしょうか?

  • 「@nifty」を文字列と認識しなくなった

    excelで「@nifty」という単語が関数と認識されてしまうのですがどうしたら文字列と認識してもらえるようになるのでしょうか。

    • 締切済み
    • Mac
  • マクロ(VBA)での文字列操作

    こういうことできますか? Dim str as String str = Cells(1, 10) Length = Find("会計", str) つまり、エクセル上のセル内の文字列を取ってきて、 会計という文字列を含む場所が何文字目か知りたい。 ところが、Find関数か認識されずエラーが出ます。 Searchにしても同じです。 エクセル関数としては使えるのですが、マクロでは使えないのですか?

  • Excelのセル内の文字操作について

    Excelのセル内に、例えば Rmax_20.5s (←_ は半角スペースです) などの様な文字列が入っているのを、関数を使用して 20.5 の様に数値のみを残すことは可能でしょうか。 REPLACEやSEARCHなどで試みましたが、出来ませんでした。 どうぞ宜しくお願い申し上げます。

  • Excelで日付を見たまま文字列として取り扱いたい

    excelで「2009年8月」と「2009年8月1日」と入力されているデータを区別したいのですが,共に日付として「2009/8/1」と認識されてしまいます。 excelデータ自身は別の人が入力しているので,「入力する時に文字列として・・」ということはできないのです。 どうにかして見えているまま文字列として取り扱いたいのですがどうしたらよいでしょうか? ご教授よろしくお願いいたします。

  • PHPソースファイルの文字列置換をしてから、

    PHPソースファイルの文字列置換をしてから、 そのスクリプトを実行する方法を実行しようとしている のですが、うまくいきません。 似たような質問(http://oshiete.nikkeibp.co.jp/qa5496696.html) を参考にして、文字列置換自体はうまくいったのですが、 phpファイル実行時にまったく関係の無いはずの DBアクセスでエラーが発生してしまいました。 変換前前のphpファイルに置換後の文字列を手で入れて、 データベース実行するとうまくいきます。 しかしながら、phpファイルの文字列置換をstr_replaceで実行し、別名保存した後 includeしても、うまくいかないといった状況です。 ちなみに置換後のphpファイル内で $置換後文字列 = "test"; echo $置換前文字列; とすると、置換前文字列が置換後文字列に きちんと変わっているようで、 "test"と出力されます。 もしかすると、原因は違う所に潜んでいるのかもしれませんが、 どこを調べれば良いのか検討がつかず困っております。 どなたか解決手段の分かる方がいらっしゃれば教えて頂けませんでしょうか? -------------------------------------------------------------- 尚、ファイル構成は top |-change (1.php) |-database (2.php) |-search (検索画面[データベース検索の入り口。form action ="./3.php"],3.php) |-base (4.php,5.php[tempファイル]) となっており、 それぞれの中身は 1.文字列置換実行用のphpファイル(1.php):  1-1.file_get_contentsで4のphpファイルを取得  1-2.str_replaceを用いて文字列置換  1-3.文字列置換したファイルをfwriteで4.phpと同じディレクトリに保存(5.php)  1-4.5.phpをincludeする。  1-5.5.phpをunlinkする。 2.データベースアクセス(mysql)用関数を含むphpファイル(2.php):  ↓エラーの原因と思われる関数  function connect() { global $host,$user_id,$passwd,$con; $con = mysql_connect($host,$user_id,$passwd); } 置換前phpファイルを手動で文字列置換した場合には  同ファイル内で設定したglobal変数の値がきちんと格納されており、  データベース実行がうまくいきます。  置換後phpファイルでは$host等に値が格納されていないため、  データベース実行がうまくいきません。  グローバル変数の中身は同ファイル内で定義しています。 3.検索を実行した時に呼び出されるphpファイル(3.php):  3-1.include("../change/1.php"); 3-2.1.phpの関数の実行 4.文字列置換前のphpファイル(4.php): /*呼び出し元のディレクトリ位置でないとincludeに失敗する*/ 4-1.include("../database/2.php");  4-2.2.phpのデータベースアクセス関数を実行する。 5.文字列置換後のphpファイル(5.php): 3-2の1.php関数の実行により、一時的に生成される。

    • ベストアンサー
    • PHP
  • セル内の文字列の分割はsearch関数やleft関数を使わずにできないのでしょうか?

    エクセルのA列に桁数が不規則な任意の数字が並んでいて、それぞれの数字には単位を表す"g"か"g/k"がついています。 B列にA列の数字を移し変えたいのですが、その際に、"g"がついているものはそのまま、"g/k"がついているものには70を掛けた後に"g"をくっつけて表記したいです。そこでB1セルに下記のような関数を使いました。 =IF(RIGHT(A1,1)="g",A1,LEFT(A1,SEARCH("g",A1,1)-1)*70&"g") のですが、すごくダラダラしてて長いように感じます。もっと簡単に同様の操作をできないのでしょうか?例えば、文字列と文字列をくっつけるのに&を使うだけですんでしまうように、-を使ったら文字が引き離せるとか、そんな便利な機能はないでしょうか? 過去の質問を検索したところ、search関数とleft関数を用いた回答が一件ヒットしただけで他に見当たらなかったので質問しました。よろしくお願いします。

  • マルチバイト文字の大文字、小文字を区別せずに置換

    ある文章に対して、フォームから入力された文字の部分の色を変えて表示するという事をしたいです。 フォームから入力された文字列が[php]として、 php、PHP、Php、phP、php、PHP、Php…など、全角、半角、大文字、小文字関係なく色を変えたい場合、 半角の文字列はeregi_replace()でできると思うのですが、全角の場合はどのように記述すれば良いのでしょうか。 フォームから入力された文字列を全角に変換してmb_eregi_replace()を行ってみたのですが、うまくいきませんでした。 文章を半角に変換すればできるとは思いますが、出来る限りそれはしたくありません。 特に一つの関数で…という事は考えていません。 何か良い方法がありましたらアドバイスをお願い致します。

    • ベストアンサー
    • PHP