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

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

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

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

Q&A

解決済

5回答

4108閲覧

PHPで最後に出現した特定文字以降を処理したい

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

2グッド

1クリップ

投稿2017/06/13 11:41

PHPの文字列操作で、指定文字(BBBBAAAAABBBBB)が最後に出現した以降の文字をすべて削除したいのですが、
どのようにしたらいいか分からないためアドバイス頂けると助かります。

元のテキスト
111111111111
BBBBAAAAABBBBB
222222222222
BBBBAAAAABBBBB
333333333333
BBBBAAAAABBBBB
444444444444

整形後
111111111111
BBBBAAAAABBBBB
222222222222
BBBBAAAAABBBBB
333333333333
BBBBAAAAABBBBB ←最後に出現した指定文字
※以降のテキストを削除したい。

宜しくお願いします。

nikuatsu, shimane👍を押しています

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

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

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

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

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

guest

回答5

0

ベストアンサー

php

1<?php 2 3ini_set('display_errors', true); 4error_reporting(E_ALL); 5 6$needle = 'BBBBAAAAABBBBB'; 7 8$txt = <<<EOF 9111111111111 10BBBBAAAAABBBBB 11222222222222 12BBBBAAAAABBBBB 13333333333333 14BBBBAAAAABBBBB 15444444444444 16EOF; 17 18$arr = explode($needle, $txt); 19array_pop($arr); 20$res = implode($needle, $arr); 21var_dump($res); 22

投稿2017/06/13 14:07

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2017/06/13 14:13

おぉwきれいだ! $res = implode($needle, $arr) . $needle; ですかね?
退会済みユーザー

退会済みユーザー

2017/06/13 14:14

Oh,Yes!
退会済みユーザー

退会済みユーザー

2017/06/14 05:54

コードがシンプルで分かりやすかったです!ありがとうございました~
guest

0

strrposを使います。

PHP

1$text=<<<EOD 2111111111111 3BBBBAAAAABBBBB 4222222222222 5BBBBAAAAABBBBB 6333333333333 7BBBBAAAAABBBBB 8444444444444 9EOD; 10 11var_dump($text); 12 13$text=substr($text,0,strrpos($text,"BBBBAAAAABBBBB")); 14 15var_dump($text);

投稿2017/06/13 13:13

otn

総合スコア84559

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

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

退会済みユーザー

退会済みユーザー

2017/06/13 13:59

$text=substr($text,0,strrpos($text,"BBBBAAAAABBBBB") + strlen("BBBBAAAAABBBBB")); では?
otn

2017/06/13 14:54

質問文の「最後に出現した以降の文字をすべて」って、それを含まずという意味なのでしょうか? 含まないなら、そうですね。
退会済みユーザー

退会済みユーザー

2017/06/14 05:52

質問の内容が不明確で申し訳ありません。含まずということです! こちらも凄く参考になりました。
guest

0

  1. 指定文字が最後に出現する行を調べる
  2. その行まで出力する

みたいな感じじゃだめスかね?

投稿2017/06/13 12:49

takasima20

総合スコア7458

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

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

0

とりあえず所与のデータで動かしてみました。

php

1<?php 2 $result=array(); 3 $tail_flg = false; 4 $a=Array("111111111111","BBBBAAAAABBBBB","222222222222","BBBBAAAAABBBBB","333333333333","BBBBAAAAABBBBB","444444444444"); 5 $b=array_reverse($a); 6 print_r($a); 7 print_r($b); 8 foreach ($b as $c) { 9 if ($c == "BBBBAAAAABBBBB" and $tail_flg == false) { 10 $result=array(); 11 $tail_flg = true; 12 continue; 13 } 14 array_push($result,$c); 15 } 16 $result = array_reverse($result); 17 print_r($result); 18

考え方としては、配列に納めたら一端逆に整列し、指定文字列が出たあとの文字列を取り出し、再び逆に整列します。

投稿2017/06/13 12:10

seastar3

総合スコア2285

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

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

seastar3

2017/06/13 12:14

回答した後で気が付きましたが、リバースした配列を指定文字列が来るまで配列から削除し続け(Array_pop()関数を利用)、削除後、再びリバースしたら同様の配列が採れます。
guest

0

あんまりきれいじゃないですが^^;

php

1<?php 2$list = <<<EOD 3111111111111 4BBBBAAAAABBBBB 5222222222222 6BBBBAAAAABBBBB 7333333333333 8BBBBAAAAABBBBB 9444444444444 10444444444444 11EOD; 12 13$array = explode(PHP_EOL, $list); 14$array_count = count($array); 15$i = 0; 16while(true) { 17 $tmp = array_pop($array); 18 if($tmp === 'BBBBAAAAABBBBB' || ++$i === $array_count){ 19 $array[] = $tmp; 20 break; 21 } 22}; 23$result = implode($array,PHP_EOL); 24 25echo $result;

投稿2017/06/13 13:54

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問