
PHPの文字列操作で、指定文字(BBBBAAAAABBBBB)が最後に出現した以降の文字をすべて削除したいのですが、
どのようにしたらいいか分からないためアドバイス頂けると助かります。
元のテキスト
111111111111
BBBBAAAAABBBBB
222222222222
BBBBAAAAABBBBB
333333333333
BBBBAAAAABBBBB
444444444444
整形後
111111111111
BBBBAAAAABBBBB
222222222222
BBBBAAAAABBBBB
333333333333
BBBBAAAAABBBBB ←最後に出現した指定文字
※以降のテキストを削除したい。
宜しくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答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
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
総合スコア86295
0
- 指定文字が最後に出現する行を調べる
- その行まで出力する
みたいな感じじゃだめスかね?
投稿2017/06/13 12:49
総合スコア7468
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
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
総合スコア2287
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
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/06/13 14:13
退会済みユーザー
2017/06/13 14:14
退会済みユーザー
2017/06/14 05:54