• ベストアンサー

目的の文字列を取得するには?

×××× 2011年10月6日 ×××××× というような文字列から日付の部分を取り出そうとしています。 if (mb_ereg("([0-9]{4})年([0-9]{2,})月([0-9]{2,})日",$string,$result)){ echo $result; } という方法で取得しようとしているのですが、失敗します。 半角数字と全角の漢字が混在しているような文字列から、目的の部分を取得する にはどうすればいいでしょうか?

  • PHP
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • 4017B
  • ベストアンサー率73% (1305/1776)
回答No.2

$string = '×××× 2011年10月6日 ××××××'; // mb_regex_encoding('UTF-8'); /* 文字コードを明示的に指定して置く方が確実 */ if ( mb_ereg( "([0-9]{4})年([0-9]{1,2})月([0-9]{1,2})日", $string, $result ) ){ echo $result; } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 厳密にマッチした文字列が日付なのか判定する場合。 $string = '×××× 2011年10月6日 ××××××'; if ( preg_match_all("/([0-9]{4})年([0-9]{1,2})月([0-9]{1,2})日/", $my_str, $matches, PREG_SET_ORDER) ) { $my_date = (string) $matches[0][0]; //正規表現にマッチした文字列全体 $my_yy = (int) $matches[0][1]; //4桁年 $my_mm = (int) $matches[0][2]; //月 $my_dd = (int) $matches[0][3]; //日 /* 文字列が日付なのか判定 */ if ( (1970<=$my_yy) && ($my_yy<=2011) && (1<=$my_mm) && ($my_mm<=12) && (1<=$my_dd) && ($my_dd<=31) ) { echo $my_date; } else { echo '日付と思われる文字列は含まれていません。'; } }

dv8hjkwf
質問者

お礼

詳しい回答ありがとうございました。 正規表現と文字コードって、ひとつの壁だと思います。

その他の回答 (1)

noname#158634
noname#158634
回答No.1

×××× 2011年10月6日 ×××××× は「日」が1桁だから mb_ereg("([0-9]{4})年([0-9]{2,})月([0-9]{2,})日",$string,$result) に引っかかるわきゃないんですが。

dv8hjkwf
質問者

お礼

返信ありがとうございました。 0~9までの半角数値が4桁続いた後に、「年」があって、その次に0~9までの半角数字が1~2桁、次に「月」があって、その次に0~9までの半角数字が1~2桁、次に「日」があるような部分を探しなさい、としたかったのです。 誤 {2,} → 正 {1,2} でした。 日が1桁というのは?

関連するQ&A

  • 全角半角混在の文字列から○文字まで取得する方法

    はじめまして! MySQLから取得した文字列をPHPで例えば10文字まで表示したいのですが、良いやり方ありますでしょうか? 文字列には全角半角が混在しているので substr関数だと、うまく取得できない場合があります。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Ruby1.9で文字列中の全角文字数を調べたい。

    Ruby1.9を使っております。 次のような全角、半角が混在した文字列があり、その文字列の中から、 全角の文字数、半角の文字数がそれぞれ何文字あるか調べる方法はありますでしょうか。 ■文字列例 "あいイウう" どうか良きアドバイスをお願いいたします。

    • ベストアンサー
    • Ruby
  • splitを使ってスペース位置で文字列を区切りたい

    splitを使ってスペース位置で文字列を区切りたいのですが、 String[] word = str.split(" ",0);  //半角空白 のように書くと、全角スペースは区切りとしてみなされず、 String[] word = str.split(" ",0);  //全角空白 のように書くと、半角スペースは区切りとしてみなしてくれません。 全角スペースでも半角スペースでも、スペース位置で文字列を区切りたいのですが、どのように書けばよいのでしょうか?

    • ベストアンサー
    • Java
  • 文字列の取得について

    Accessのモジュールを使ってある文字列から指定した文字数の文字列を取得しようとしています。 A:"あああああ" & vbcrlf B:"いいいいい" & vbcrlf C:"うううううう" & vbcrlf D:"えええええ" & vbcrlf A~Dまでフィールドがあり、vbcrlfは改行です。 この文字列に対して以下の処理を実行します。 (1)変数mojiにA & B & C & Dを代入 (2)mojiを全角に変換 (3)Left(moji,20)で左から20文字取得します。 (4)mojiをテキストボックスに登録します。 (5)入力チェック処理  ・フィールドサイズが20文字以内か?  ・全角で登録されているか? →登録後のイメージ ---------------- あああああ いいいいい ううううう ---------------- テキストボックスには全角でしっかり登録されているようにみえるのですが、 どうしても全角で登録してくださいというメッセージが表示されてしまいます。 うううううの次の改行を削除すると、メッセージはでなくなります。 この改行が半角になっているのでしょうか? アドバイスよろしくお願いいたします。

  • Excelで22バイトの文字を数えたい

    Excel2002です。 VBAでセルの文字列を取得する時に全角制御文字(2バイト)を含めて22バイトの制限を考慮したいのですがその方法がわかりません。 全角文字だけなら10文字、  半角文字だけなら22文字の取得ができます。 その後の作業の都合上、22バイトを基準に条件判断したいのですが現在はその方法がわからないためLEN()で10を上限としています。LENB()でも同じ結果(文字数が返される)になります。 対象のセルには全角文字/半角文字が混在しており、全角-半角-全角-半角のような混在であれば制御文字を2回考慮する必要があります。 最悪その文字が全角か半角かの区別がつけば対応できると思います。 よい方法をご教授いただきたくお願いいたします。

  • Excelで文字の長さを揃えるには

    excel95とExcel2000を使っています。 漢字やひらがな全角カタカナ全角英数字は2バイト、 半角カタカナ英数字は1バイト、 2バイトと1バイトの混在入力して20バイトの長さの文字列を比べると見た目の長さが違う。 同じ20バイトの文字列を見た目を揃える方法を教えてください。

  • エクセルシートの文字列加工について

    エクセルのシートのA列に"全角ひらがな漢字"の文字列と"半角英数"の文字列を含むセルが縦に並んでいます。約200行。 ■この中から、"全角ひらがな漢字"の文字列を右となりのB列に、"半角英数"の文字列をさらに右となりのC列に、それぞれコピーしたいのですが、関数・マクロなどでいい方法がありましたら教えて下さい。 ■それから、半角英数文字列のC列から、""で囲まれた文字列のみをさらにD列にコピーしたいのです。 文字列の長さが統一されていれば、比較的簡単なのですが、今回は文字列の長さが不規則です。よろしくお願いします。

  • 全角半角考慮した文字列分割

    A列           B列         C列 あいうえおかきくけこ  あいうえ      おかきくけこ アイウエオカキクケコ   アイウエオカキクケ  コ あいうえオかきくけこ   あいうえオ    かきくけこ A列に全角半角混在のテキスト項目があります。 B列、C列に以下のルールで分割したいのですが、Excel関数で 実現可能でしょうか?可能な場合は式をご教授して 頂けますでしょうか。宜しくお願い致します。 ※全角をバイト数指定で分割して文字化けしないように 全角半角を考慮して分割したいと考えております。 B列  A列9桁目が半角の場合は半角9文字 A列9桁目全角の場合は半角8文字(全角4文字)をB列へ C列  A列10桁目が半角の場合は、左端10桁目~半角9文字 A列10桁目が全角の場合は、左端9桁目~半角9文字

  • 文字数を取得したい

    漢字を含んだ文字列の文字数を取得したのですがうまくいきません。 どなたか教えてください。 例: 「asetg漢字」という文字列だったら、7文字として取得したい。 上記の例で、lstrlenや、MFCの関数(String)で文字数の取得を試みたのですが、バイト数で取得してしまうため、うまくいきませんでした。

  • 文字列取得 substrではできません。

    1バイト2バイト混在文字列を substrで取得すると、2バイト文字が半分になるため最終文字が文字化けします。 1、2バイト混在文字をうまく取得できる関数はありますか?

    • ベストアンサー
    • PHP

専門家に質問してみよう