phpのソースをきれいにしたいです
if( false !== $tmp_title = strstr($title, 'このような内容です。', true) ){
$title = $tmp_title;
}
if( false !== $tmp_title = strstr($title, '上記となっています。', true) ){
$title = $tmp_title;
}
このような内容です。
上記となっています。
のどちらかの文が現れたらそれ以前を取得というコードを書いたのですが
勘ですがもう少しコード量も少なくきれいな書き方があるような気がしています。
調べたところpreg_replaceを使った正規表現ならいけるのでは?と思案しています
みなさんならどういう方法を取りますか?アドバイスなどなどお願いしたいです
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/31 02:02
回答6件
0
ベストアンサー
これが一番シンプルですね.マッチした部分を空文字列に置換するだけです.
php
1$title = preg_replace('/(?:このような内容です。|上記となっています。).*/s', '', $title);
- 後ろが
.*
.+
.*+
.++
のいずれかであれば,前で^(.*?)
^(.+?)
をマッチングさせる必要はないです. .
を任意の1バイトにマッチさせたい場合s
修飾子は必須なので付け忘れずに.
【蛇足】
何千回もループしないかぎりほとんど差はでませんが,.*?
.+?
は1オフセットごとに後ろをチェックするため速度低下を招きます.出来るだけ使用は控えめに.また今回は大丈夫ですが,バックトラックが発生するケースでは.*
.+
も同様です.バックトラックがどうしても動作上必要な場合はしょうがないですが,不必要な場合は .*+
.++
にして抑制をしておくと動作速度が向上することがあります.
投稿2016/03/31 19:21
編集2016/03/31 19:55総合スコア5223
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/01 07:23 編集
2016/04/01 09:01
0
php
1$title = strstr($title, 'このような内容です。', true) ?: $title;
投稿2016/03/31 04:29
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/31 05:02
2016/03/31 09:57
2016/03/31 19:41
2016/04/01 01:43
2016/04/01 03:46
0
間違っているという指摘を受けたので、消しました。
すいません。
投稿2016/03/31 02:11
編集2016/03/31 06:39総合スコア1844
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/31 02:35
2016/03/31 04:16 編集
2016/03/31 04:57
2016/03/31 06:41 編集
2016/03/31 19:46
2016/04/04 05:25
0
strstr関数は戻り値が文字列又はfalseを返すので
今回の場合はfalseでない場合処理をするということなので下記の書き方が良いと思います。
PHP
1if( ($tmp_title = strstr($title, 'このような内容です。', true)) !== false ){ 2 $title = $tmp_title; 3}
全体のコードの標準化をするのが良いコードだと私は考えるので、
どれが正解とも言えません。
ただ、IF文内で代入をする場合は括弧で囲む方が可読性は増すと思います。
投稿2016/03/31 03:28
編集2016/03/31 03:52総合スコア153
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/31 04:48
2016/03/31 05:08
2016/03/31 19:43 編集
2016/04/01 01:49
0
私も初心者なので、どなたかフォローいただけると幸いなのですが、以下でどうでしょうか?
php
1if(preg_match('/(.*?(:?このような内容です。|上記となっています。))/s', $title, $tmp_title)){ 2$title = $tmp_title[1]; 3}
投稿2016/03/31 02:23
編集2016/03/31 02:24退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/31 04:57 編集
2016/03/31 04:50
2016/03/31 04:58
退会済みユーザー
2016/03/31 06:54
2016/03/31 19:48
0
コード量のはあまり変わりませんが、検索する文字が増減するのを見越して配列にしておくのも手です。
if
周りの書き方は人の好みがある思いますが、個人的に2行に分ける方が好きです。
php
1$needles = ['body', 'upper']; // 検索する文字列を配列で定義 2$title = 'abc body def'; 3 4foreach ($needles as $needle) { 5 $head_title = strstr($title, $needle, true); 6 if (false !== $head_title) { 7 $title = $head_title; 8 break; 9 } 10} 11 12echo $title;
投稿2016/03/31 08:08
総合スコア421
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。