• ベストアンサー

正規表現で一桁の数字を二桁に置換する方法

いつもお世話になっています。 yahoopipesでページからrssを作っています。 「2012/12/12」などとなっている数字をpubdateとしてソートしたのですが、一桁の月日の場合「2012/1/1」など二桁になっていないためか、うまく降順に並びません。 二桁の数字はそのままで、一桁の数字は頭に0をつけて二桁にする正規表現はどう書けばよいのでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

まぁいろいろあるとは思いますが、e修飾子で日付関数に 投げてしまうというのが楽です <?PHP $str="hoge2012/1/9fuga"; $pattern="/\d{4}\/\d{1,2}\/\d{1,2}/e"; $replacement="date('Y/m/d',strtotime('$0'));"; $str=preg_replace($pattern,$replacement,$str); print $str; ?>

tse-sie
質問者

お礼

ありがとうございます! 上記の方法だとyahoopipesでY/m/dとそのまま置換されてしまったので下記のサイトを参考にしました http://d.hatena.ne.jp/seuzo/20100113/1263312410 一度「○年○月○日」に置換してから、一桁の月・日を0$1に置換するとうまくソートできました!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 正規表現で半角数字1桁のみを全角数字に変換

    お世話になります。 JavaScript(JSP)で、 正規表現で半角数字1桁のみ(2桁以上は変換しない)を、 全角数字に変換する方法を教えてください。 たとえば、 ”hoge3hoge5”文字列内の、 半角数字1桁のみを、 正規表現で、全角数字1桁に、それぞれ変換   ↓ ”hoge3hoge5” あわせて、 半角数字が2桁以上、連続で続いている場合には 変換せずに、半角数字のままにしておきたいです。 ”hoge33hoge5”    ↓ 正規表現で、半角数字1桁のみを、全角数字1桁に変換 (半角数字2桁以上は変換しない) ”hoge33hoge5” 以上になります。 もしご存じの方がいらっしゃいましたら、 よろしくお願いします。

  • 【VBScript】正規表現で数字の前0(ゼロ)を削除

    【VBScript】正規表現で数字の前0(ゼロ)を削除 ある変数に3桁の数字が格納されています。 例えば、001とか099とか403とか800とかです。 やりたいことは、数字の頭のゼロを削除したいです。 001→1 099→99 403→403のまま 800→800のまま 正規表現でなくても良いですが、 よろしくお願いします。

  • Cygwinの正規表現

    こんにちは、いつもお世話になっております。 タイトルの通りなのですが、 連続する0~9の数字が3桁と4桁の行が 入り混じっているテキストに対して、 3桁のもののみをgrepしたいのですが、 上手く行きません。 この場合の正規表現はどのようにすれば 良いでしょうか? ちょっと稚拙かも知れませんが、 1時間ぐらい錯綜しています。 何卒よろしくお願いします。

  • 上手い置換方法は?

    いつも助けてくださってありがとうございます。 PHPの置換で困っています。 全てが三桁の数字がいくつか変数で送られてくるんですけど 100はそのまま使いたいのですが001など一桁や2桁の数字の場合 左側の0が邪魔になる場合があります。 そこで、正規表現で右側に0があれば削除すればいいことまではわかったのですが、肝心の関数の使い方が上手く解かりません ereg_replaceだと思うんですけど実際どう使用したらいいのか教えていただけませんか??

    • ベストアンサー
    • PHP
  • 6桁~8桁の整数を2桁で表現する方法について

    いつも大変お世話になっております。 何卒よろしくお願い致します。 標題の件になります。 例えば、 1000000(7桁) という数字と 888888(6桁) という数字があります。 このそれぞれの値を、100以内で表現するには(2桁)どのような 公式を用いればよろしいでしょうか。 お手数をお掛けしますが、何卒よろしくお願い致します。

  • 正規表現で全角数字を半角数字に置換する方法は?

    いつもお世話になっております。 テキスト内の全角数字5桁のみを該当の半角数字5桁に置換する方法を探しています。 OS:Win テキストエディタ:sakuraエディタ、秀丸 例) ---------------------------------------- あいうえお01234かきくけこ99さしすせそ ↓ あいうえお01234かきくけこ99さしすせそ ---------------------------------------- 正規表現で行えばいいと思い、置換文字列を  [0-9][0-9][0-9][0-9][0-9] あるいは  [0-9]{5} にしましたが、置換後の文字列が分かりません。 試しに検索で上記の文字列を試すと、該当箇所がマークされるので、 置換前の文字列は合っています。 置換後の文字列をご教授願えますでしょうか。 ※テキストエディタで無理ならプログラム組みます。 VBScriptを考えていますが、他に良い言語があれば併せて教えてください。

  • 正規表現について

    いま.Netで正規表現にチャレンジしているのですが、どこが問題なのか分からず、投稿させていただきました。 正規表現のパターンです。 \\[Cc]\[(?<$0>[0-9]+),(?<$1>[0-9]+),(?<$2>[0-9]+)\] で、マッチさせたい文字列は、 \C[255,255,255] です。「[255,255,255]」の数字の部分は、一桁から三桁までの数字であれば何でもOKです。 マッチしないことは、http://jsregex.com/を使って調べました。 どうぞよろしくお願いします。

  • 秀丸で正規表現による置換

    正規表現でつまずいてしまったので教えてください。 こういうデータがあったとして ,,E,77774000,1,77770004480,〇〇〇,0,,,,,l_ ,,E,77774000,13,77770004479,〇〇〇,0,,,,,l_ ,,E,77774000,21,77770004478,〇〇〇,0,,,,,l_ ,,E,88884000,5,88880004480,〇〇〇,0,,,,,l_ ,,E,88884000,14,88880004479,〇〇〇,0,,,,,l_ ,,E,88884000,20,88880004478,〇〇〇,0,,,,,l_ 6列目に77770004480があったら、5列目の1を10にする。 6列目に88880004480があったら、5列目の5を10にする。 という事がしたいのですが、7777や8888の部分は必ず数字4桁で固定ですが、 実際には0000-9999まであるため、1万回置換するのは面倒です。 そこで、0004480があったら、ヒットする1や5を10に置き換える事がしたいのですが どのようにしたらいいでしょうか? また、12を2に置き換えることもあるので、5列目は 必ず数字ですが、1桁または2桁となります。 正規表現置換で使用するエディタは、秀丸です。 ,,E,77774000,1,77770004480,〇〇〇,0,,,,,l_ ↓ ,,E,77774000,10,77770004480,〇〇〇,0,,,,,l_ ,,E,88884000,5,88880004480,〇〇〇,0,,,,,l_ ↓ ,,E,88884000,10,88880004480,〇〇〇,0,,,,,l_ 以上よろしくおねがいいたします

  • 「8桁の数字」を表現したい。

    要素の数が不定(決まっていない)なレコードから構成されるファイルを読みます。 そして1件目のレコードを取り出したいのです。 レコードは以下のような構成です。 頭に8桁の日付(20140602のような)が在り、各要素は英数字で全角半角ナンでも入っています。 ただ、要素は"<>"で区切られています。 例えば、 20140602<>552<>東京都あきる野市<>20140601<>電話03-442-8787<>87-3524<>19900401<>,,,,,,,, と続きます。 条件としては、 レコードの頭に8桁の日付が在りますが、要素の中には連続する8桁の数字は存在しません。 日付はまちまちですが、1900年以前はありませんので、「19000000<」と聞くことは可能です。 このファイルから1件目、 例で言えば、「20140602<>552<>東京都あきる野市<>」を取り出したいのです。 質問です。 instrで2件目の頭を見つけ、全体の長さからその位置を引いてやれば取り出せるかなと思いました。 instr(2,wka,8桁の数字)のように。 この「8桁の数字」をどう作る(指定する)かが分かりませんので、質問しています。 そのような表現は出来ないモノでしょうか。 もっといい方法が在ればそれに越したことはありません。 宜しくお教え下さい。

  • 正規表現

    いつもお世話になっております。 度々で申し訳ありませんが、正規表現について教えていただきたいと思います。 「数字」または「-」プラス「数字」の場合のみOKになるように するにはどのように書けばよろしいでしょうか。 たとえば・・・ 10 → OK -10 → OK 53 → OK -53 → OK +53 → NG 45- → NG <環境> PHP:4.4.2

    • 締切済み
    • PHP