アプリ版:「スタンプのみでお礼する」機能のリリースについて

$date = 20211031;
この $date を「2021/10/31」のようにスラッシュを入れる場合どのように記述すればいいですか?

質問者からの補足コメント

  • ありがとございます。

    >$d=~s:(\d\d)(\d\d)$:/\1/\2:;
    出来たら上の意味を教えて貰えますか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/10/30 11:45
  • ありがとうございます。

    $m_date='20211030';
    $dm_date = sprintf("%04d\/%02d\/%02d", substr($m_date,0,4) , substr($m_date,4,2) , substr($m_date,-2) );

    正規表現がどうにも苦手で上のような構文より正規表現を使った方が処理が早いってことなんですよね?

    No.2の回答に寄せられた補足コメントです。 補足日時:2021/10/30 14:23

A 回答 (4件)

「別の変数に設定する」場合でも, 例えば


$date = '20211031';
$sdate = $date =~ s!(\d+)(\d\d)(\d\d)!$1/$2/$3!r;
のようにすればいけるよ.
    • good
    • 0

$date ="2021/10/30" ;


と$date自体を書き換えたいのか、
$sdate =????($date); # $sdate= "2021/10/30" になる
等と、別の変数にしたいのか、にもよります。


$m_date='20211030';
$dm_date = sprintf("%04d/%02d/%02d",
substr($m_date,0,4) , substr($m_date,4,2) , substr($m_date,-2) );

について。
正規表現とどちらが早いか、は、わかりません。

ですが、次の点で正規表現の方が良いと言えます。
1. 正規表現では「8文字の数字列」かどうかのチェックも同時に行える。
if (正規表現){
 「8文字の数字列」になっている
} else {
 「8文字の数字列」ではない
}
2.何度もsubstr($m_date,〜) って書くのは面倒くさい。しかも、引数を考えながらやらなければならない
3.正規表現の方がPerlっぽい
    • good
    • 0

$date =~ s/(\d+)(\d\d)(\d\d)$/\1\/\2\/\3/;


または読みやすくして
$date =~ s{ (\d{1,}) (\d{2}) (\d{2}) $ }{\1/\2/\3}x;

末尾から2桁数字、その前の2桁数字、その前の1桁以上の数字
があれば途中に斜線記号を入れます。

参考)
https://perldoc.jp/docs/perl/5.26.1/perlre.pod
この回答への補足あり
    • good
    • 0

一例


$d=12345678;
$d=~s:(\d\d)(\d\d)$:/\1/\2:;
print $d;
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!