質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

3回答

363閲覧

phpの正規表現がわからない

nyanryou

総合スコア20

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2019/09/18 03:24

編集2019/09/18 03:27

正規表現について調べたのですがよくわからなかったので質問させていただきました。

'2019-09-11T20:30:47.257262239Z'
↓  
09/11 20:30

このように置換したいのですが、上の文字列がややこしくてどのように書いたらいいのかわかりません。
教えていただきたいです。回答をみながら理解したいと思います。
preg_replaceに記述していただければ幸いです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/09/18 03:30

date() 関数を使わずにわざわざ正規表現を使いたいということでしょいうか?
nyanryou

2019/09/18 03:38

date()関数使用すると簡単にできるのですか? 正規表現を使用する方法しかしりませんでした。
退会済みユーザー

退会済みユーザー

2019/09/18 03:41 編集

初心者ほど、「正規表現で」という質問が多いけど、どうしようも無い最悪の悪手です。
nyanryou

2019/09/18 03:43

そうなんですか… 教えていただきありがとうございます!
Zuishin

2019/09/18 03:49

なぜ悪手なのかは聞かなくていいんですか?
nyanryou

2019/09/18 03:52

ありがとうございます!! そこを聞かなければいけないですよね… ややこしいからと勝手に解釈してました。
nyanryou

2019/09/18 03:53

すみません お聞きしてもよろしいですか?
m.ts10806

2019/09/19 06:49 編集

こういうの。 echo date('m/d H:i',strtotime('2019-09-11T20:30:47.25262239Z')); 動かしてないですけど日付の記法的には9/11 20:30にはならないとおもう。 ↑にしたいなら -2hoursをつければ良いけど。本当に9/11 20:30という表記でいいのかは確認が必要。
nyanryou

2019/09/19 11:42

ありがとうございます! 記述法だとは知りませんでした。調べてみたら出てきました。 動かしてみたところ09/11 22:30このようになりました。 グリニッジ標準時ということなので、正確な時間は+9時間でいいんしょうか?
m.ts10806

2019/09/19 11:50

さぁそれはその時間がどういうタイムゾーンでくるか、によります。なので確認が必要です。それにきちんとdate関数を深掘りすれば日付の足し引きは不要になるはずです。 まあ、正規表現で解決されたようなので、あとは自分で追求してみてください。
nyanryou

2019/09/19 11:53

そうですね。聞いてばかりではだめですね。わざわざ教えていただきありがとうございます。 勉強になりました。
guest

回答3

0

解決されたようですが、正規表現を使わない例を記載しておきます。正規表現は使わなくて済むなら使わないほうがよいです。

php

1list($date, $time) = explode('T', '2019-09-11T20:30:47.257262239Z'); 2list(, $m, $d) = explode('-', $date); 3list($h, $i, ) = explode(':', $time); 4echo "{$m}/{$d} {$h}:{$i}";

投稿2019/09/18 05:00

thyda.eiqau

総合スコア2982

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nyanryou

2019/09/18 07:22

おお!ありがとうございます。 よければ正規表現を使わないほうがよい理由を教えてほしいです。
thyda.eiqau

2019/09/18 08:40

パターンが複雑になればなるほどメンテナンスが大変だし、パターンが簡単であればあるほど動作が重くなるからです。 yambejpさんの提示されているパターンであれば動作の重さはそこまでではないかもしれませんが、そこまでではないとしても重いは重いです。 正規表現は他に手がないときにしか使わないくらいの気持ちでいたほうがよいです
nyanryou

2019/09/18 09:16

詳しくありがとうございます。 重いなんてしりませんでした。
m.ts10806

2019/09/19 06:26

補足しますと、日付は決まった記法があるので標準関数で事足りることがほとんどです。
guest

0

ベストアンサー

おそらくこういうことをしたい?

PHP

1$str='2019-09-11T20:30:47.257262239Z'; 2$pattern="/\A\d{4}-(\d{2})-(\d{2})T(\d{2}:\d{2}):\d{2}.\d{9}+Z\z/"; 3$replacement="$1/$2 $3"; 4$str=preg_replace($pattern,$replacement,$str); 5print $str;

※どこまで厳密に$strをチェックするか次第ですね
上記だと9999年99月99日など存在しない日付にもヒットしますので

投稿2019/09/18 03:31

yambejp

総合スコア114825

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nyanryou

2019/09/18 03:44

いつもいつもありがとうございます! 助かりました。 この回答を見て理解したいと思います。
guest

0

何をしたのか不明なので、正規表現に関して詳細に書かれているドキュメントのリンクを張っておきます。

PCRE のパターン

php の正規表現は2種類ありますが、PCRE を利用することをオススメします。

また、パターンの検証にはいかが便利です。

regex101.com

デバッグを書けられるので、挙動を追うことが可能です。

投稿2019/09/18 03:28

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/09/18 03:35

まぁ、やりたいことどおりなら、正規表現を使用するのは悪手です。 日付のフォーマットを変換することを考えるのが一般的です。
nyanryou

2019/09/18 03:40

回答ありがとうございます! '2019-09-11T20:30:47.257262239Z'でデータが送られてきたので正規表現しか方法をしりませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問