
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ランキング
-
PHP8でWarning:Undefined varia...
-
composerをインストールしたい...
-
phpの問い合わせフォームを作っ...
-
配列の値の更新方法について
-
PHPの構文で間違えが分からない
-
SFTPなどは使わないホームペー...
-
$_SESSIONに渡した後はそのまま...
-
($_POST['email']??"", ・・・...
-
phpのエラーについて
-
PHP MySql 画像を取得
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
HTML PHP ラジオボタンのイベント
-
php でqiitaのサイトにあったフ...
-
SplFileObject を利用したとき...
-
PHPの勉強してます。 配列のと...
-
BASIC認証のフォームをデザイン...
-
アップロードファイルを表示す...
-
複数のパソコンの中の1つのパソ...
-
返信機能のツリー構造の深さを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
phpの問い合わせフォームを作っ...
-
composerをインストールしたい...
-
PHP8でWarning:Undefined varia...
-
marginの値でマイナス値を設定...
-
phpでcookieがうまく保存されない
-
SplFileObject を利用したとき...
-
PHPSpreadsheetを使って関数を...
-
PHPSpreadsheetによる書き出し...
-
PHP8を使うと、大量のWarningが...
-
フォームで戻った際に入力済み...
-
PostgreSQLからCSV形式でエクス...
-
PHPを使って、別サイトの一部を...
-
BASIC認証のフォームをデザイン...
-
入力した部分を表示させたまま...
-
【初心者】XAMPPのapacheの(恐...
-
ログイン機の付きの掲示板サイ...
-
ワードプレスサイト PHP8.0.25...
-
Postgresの特定のカラムからス...
-
PHPで画像の渡しが上手く行きま...
-
PHPの勉強してます。 配列のと...
おすすめ情報