9月18日(火)7時55分を配列へ格納したいです。
■1
$data = preg_split("/月|日|\(.\)|時|分/",$data);
とやると、うまく区分けされないところがあります。
Array
(
[0] => 9
[1] => 18
[2] => (火)7
[3] => 55
)
■2
preg_split("/月|日|\(*\)|時|分/",$data);とやると、
曜日のところが変な感じになります
Array
(
[0] => 9
[1] => 18
[2] => (火
[3] => 7
[4] => 55
)
■3
preg_split("/月|日|\(.*\)|時|分/",$data);
もしくは、
preg_split("/月|日|\(.*?\)|時|分/",$data);
とやると、曜日が取得できません
Array
(
[0] => 9
[1] => 18
[2] =>
[3] => 7
[4] => 55
)
■質問
・きれいに区切るには、どう書けば良いでしょうか?
・後、正規表現も勉強したいので、それぞれなんで駄目なのか教えてください
No.2ベストアンサー
- 回答日時:
>正規表現も勉強したいので、それぞれなんで駄目なのか教えてください
そもそも曜日も取り出したいのですか?そうすると出発点である /月|日|\(.\)|時|分/ から間違ってます。これだと曜日も消したいと言うことになってます。
■1
なおこれが、曜日も消えていないのは、「火」が1バイトじゃないので 「.」 にマッチしないから。今時の普通の言語だと日本語のようなマルチバイト文字に対応していますが、PHPは普通の言語じゃないので専用の関数を使わないとマルチバイト文字をうまく使えません。preg_関数だと「.」は1文字じゃなくて1バイトにマッチします。
■2
「\(*\)」 は、「左括弧がゼロ個以上の後に右括弧」にマッチします。
この場合だと 「)」 が該当しますね。
■3
「\(.*?\)」 は、「左括弧の後に何バイトかあってその後に右括弧」ですね。
この場合だと 「(火)」にマッチするのでそれが区切り文字となって削除されます。
曜日も取り出したいのであれば、区切りに ( や ) を含める。
print_r(preg_split("/月|日|\(|\)|時|分/", $data));
↓
Array
(
[0] => 9
[1] => 18
[2] =>
[3] => 火
[4] => 7
[5] => 55
[6] =>
)
これだと途中に空が混ざるので、これを削除するには、
案1.( )+ で、連続する区切り文字をひとまとめにする
print_r(preg_split("/(月|日|\(|\)|時|分)+/", $data));
↓
Array
(
[0] => 9
[1] => 18
[2] => 火
[3] => 7
[4] => 55
[5] =>
)
末尾の空はしょうがない。
案2.第4引数で、空の結果を省くことを指定する。
print_r(preg_split("/月|日|\(|\)|時|分/", $data,-1,PREG_SPLIT_NO_EMPTY));
↓
Array
(
[0] => 9
[1] => 18
[2] => 火
[3] => 7
[4] => 55
)
「回答&詳細な解説」ありがとうございました。
>そもそも曜日も取り出したいのですか?そうすると出発点である /月|日|\(.\)|時|分/ から間違ってます。
ご指摘ありがとうございます。前提から違ってたようで、失礼しました。
アドバイスを元に色々勉強していきたいと思いますー
No.1
- 回答日時:
"日"の直後に"("が必ず存在するなら
<?php
$str = '9月18日(火)7時55分';
$arr = preg_split("/月|日\(|\)|時|分/", $str);
print_r($arr);
になると思います。でも個人的には
$str = '9月18日(火)7時55分';
$arr = array();
foreach (preg_split("/月|日|\(|\)|時|分/", $str) as $val) {
if ($val !== '') { $arr[] = $val; }
}
print_r($arr);
として空白を詰める方が好みですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 09:24
- 不動産投資・投資信託 通貨選択型「投資信託」について 3 2023/08/17 21:52
- Visual Basic(VBA) VBA 毎日取得するデータを順番に反映していく方法 6 2023/08/26 16:22
- Excel(エクセル) 何方か知恵をください… 下記のシート1にシート2のDATAを表示させたいです。 (シート1の2行目の 6 2022/03/28 17:27
- Visual Basic(VBA) 列 A に同じ日が2つが必要です。 1 2023/03/28 07:25
- アルバイト・パート 今日の昼頃バイトの面接に合格電話が来ました。 21〜25日で都合のいい日を聞かれ、 私は火曜日から大 2 2022/04/17 21:16
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- 筋トレ・加圧トレーニング 筋トレについて、鍛える部位 6 2022/04/18 10:38
- Excel(エクセル) エクセル 5 2023/02/24 09:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語でCSVファイルの行数を読...
-
stdClass Objectを連想配列のよ...
-
複数ファイルで、それぞれの行...
-
別ファイルの構造体の値を読み...
-
変数で来た指定日に対して、+3...
-
CSVデータの行数カウントをした...
-
stream_get_contentsの代替関数
-
エラーメッセージ(無効な間接...
-
PHPのfputcsv を使わずにCSVに...
-
自動で番号を振りたい
-
PHPでCSVの一部の行を編集したい
-
マッチング処理(1:N)
-
foreachのなかで次のキーを参照...
-
特定の文からメールアドレスの...
-
ファイルの逆読みってできますか?
-
プログラミングのPythonのnoteb...
-
スカラーのベクトル微分
-
CArrayの要素としてCStringArra...
-
PHPで変数名にハイフンを使うに...
-
配列を回すとき、最後の要素だ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数行のデータのPOST処理に関して
-
Resource id #3 と表示されま...
-
別ファイルの構造体の値を読み...
-
バイナリファイルの内容を、そ...
-
PHPでCSVの一部の行を編集したい
-
CSVファイルの最終行のデー...
-
ヒアドキュメントの中のfor文
-
stdClass Objectを連想配列のよ...
-
◆速い、ファイル読み込みは?
-
C言語でCSVファイルの行数を読...
-
phpでCSVファイルの中身を多次...
-
rubyで複数列のデータを一行に...
-
多次元配列の一次元目の最大値...
-
行数が30万件ほどあるCSVから、...
-
配列同士の足し算のループ処理
-
FortranのOPEN文
-
自動で番号を振りたい
-
csvの内容を行単位で削除したい
-
CSVデータの行数カウントをした...
-
While文を使って配列の中身を全...
おすすめ情報