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

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

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

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

正規表現

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

Q&A

解決済

4回答

809閲覧

preg_replace

curekaishine

総合スコア82

PHP

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

正規表現

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

0グッド

0クリップ

投稿2016/05/06 09:59

日本国 東京都 世田谷区 明大前駅
という半角スペース区切りの文字列から

右端の半角スペースxxxxxx駅

を削除したく以下のようなコードを書いたのですが

理想:日本国 東京都 世田谷区
現状:日本国

と 東京都 世田谷区が消えてしまいました

$a = '日本国 東京都 世田谷区 明大前駅';
$a = preg_replace('/ .+?駅/', '', $a);
echo $a;

一番右端のものだけ?もしくは2回以上半角スペース入らないようにする?にはどう書けばよいのでしょうか?

補足:
必ず3回の半角スペース区切りではないようで
世田谷区 明大前駅
東京都 世田谷区 明大前駅
だったりします

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

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

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

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

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

guest

回答4

0

正規表現はとても便利で強力な表現方法なのですが、正確に理解しないとデバッグが大変だという面があります。
ので、正規表現を使わなくていい場合は使わない方法を考えるのもありです。

今回の場合だと以下の様な感じでしょうか。
デバッグはしてませんのでエラーは出るかもしれませんが、各関数のマニュアルを確認して頂ければ流れが追えるかと思います。

PHP

1//半角スペースで区切って配列に格納する explode http://php.net/manual/ja/function.explode.php 2$tmp_address = explode(" ","国 都府県 地域 ***駅"); 3//配列の末尾を削る array_pop http://php.net/manual/ja/function.array-pop.php 4$station = array_pop($tmp_address); 5 6//配列を半角スペースで連結する implode http://php.net/manual/ja/function.implode.php 7$address = implode(" ",$tmp_address); 8 9//国 都府県 地域 と出力されるはず 10echo $address;

投稿2016/05/06 10:17

編集2016/05/06 10:24
tanat

総合スコア18713

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

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

curekaishine

2016/05/06 10:34

回答ありがとうございます explodeの次の処理で 配列の末尾が****駅なら 削るという形で希望した処理の実現はできました
katoy

2016/05/07 09:38

空白で区切って配列にして、0 番目だけを返すか 0番目と1番目を空白でつないで返すかするゆにすれば良いと思います。
guest

0

ベストアンサー

PHP

1preg_replace( "/\s+[^\s]+駅/", "", $a );

投稿2016/05/06 10:22

kei344

総合スコア69407

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

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

curekaishine

2016/05/06 10:40

回答ありがとうございます うまくいきました!
guest

0

/ [^ ]+?駅/

こんな感じでは?

投稿2016/05/06 10:28

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2016/05/06 10:32

正規表現でやるなら、kei344さんのですね^^ 私のだと色々ダメだわw
curekaishine

2016/05/06 10:40

回答ありがとうございます おっとそうでしたか・・パッと見もんだいなくうごきましたw
guest

0

php

1$a = preg_replace('/ \w+?駅/', '', $a); 2ではどうでしょう?

投稿2016/05/06 10:12

編集2016/05/06 10:14
OpShig

総合スコア27

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

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

OpShig

2016/05/06 10:17

「駅」の前の「?」は何を想定しているのでしょう?
OpShig

2016/05/06 10:20

$a = preg_replace('/\s+\w+駅/', '', $a); とかでも良さそうな気がします。 半角スペースが複数ある可能性もあるのであればですが。
curekaishine

2016/05/06 10:35

回答ありがとうございます すみませんなせか自分の環境だと***駅が消えませんでした・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問