PHPを使用して文字列の末尾の文字を除去する方法

2153 ワード

前言
仕事の中で1つの需要に出会った:1列の文字列、例えば“迅雷の公式ダウンロード”、“速播5.0ダウンロード”、彼らの最後の“公式ダウンロード”と“ダウンロード”、などの文字を取り除く必要があります.
case
case1: str_replace()
私が最初に思いついたのはstr_replace関数を使うことです.しかし、この関数はサブ文字列をフィルタリングすることができ、フィルタリングの回数を制限することができますが、フィルタリングの最後の文字列を制限することはできませんのでpassは削除します.
case2: mb_strpos + mb_substr() + mb_strlen()
フィルタ文字列の長さをそれぞれ取得し、「公式ダウンロード」は4文字で、mb_substrを使用して末尾の4文字をカットします.php function filter_word($word){ $filterList = [' ',' ']; foreach ($filterList as $fitler){ $wordLen = mb_strlen($word,'utf-8'); $filterLen = mb_strlen($fitler,'utf-8'); $offset = $wordLen - $filterLen; // ( ) if ($offset <= 0){ continue; } $strPos = mb_strpos($word, $filter, $offset,'utf-8') !== false ? mb_strpos($word, $filter, $offset,'utf-8') : false; if ($strPos !== false){ $word = mb_substr($word,0,$offset,'utf-8'); } } }に注意
  • mb_strpos関数の3番目のパラメータ、$offsetが負の値は末尾から計算されません!
  • mb_*を使用してMultibyte String
  • を処理する
    case3: trim()
    case 2は本需要を解決することができますが、面倒だと思って、同僚に聞いて、同僚はもっと良い方法がありますか.
    同僚:“trim”を使うことができます
    私:('trimは私のpassに落ちた最初の関数だと思います.')trim中国語だと文字化けしてしまいます.
    同僚:栗をあげる
    私:....
    それから私は公式サイトに行ってtrim関数をよく読んで、収穫が大きいです.
  • 2は2番目のパラメータを指定せず、デフォルトで空白文字とtr0x 0 B
  • をフィルタします.
  • trim('bacabccba','abc') --> ''
  • trim('abcdefg','a..e') --> g
  • フィルタ配列array_map('trim',$arr)
  • しかしtrimの中国語が文字化けした原因については見つからず、グーグルを通じてやっと見つけた.中の原理がはっきりしているので、私は余計なことを言わない.
    げんり
    16進数の値をどのように生成するかは原理的に説明されていませんが、ここで補足します:bin 2 hex()
    また、trimのほかにsplit関数やsplice関数でも同様の問題が発生することが公式サイトで明らかになった.
    case4: preg_replace
    trim文字化けしを探す過程で、正則置換も使えることが分かった.当時はこの需要に限られていた可能性があり、考えが狭くなった.
    preg_replace('/  \$/','',$str);

    結論
    最後の文字列を正規に置き換えるのが最も簡単な解決方法です.
    しかしcase 2を通じて、自分で多くの関数を運用し、どのように最適化するかを考えて需要を解決する感じもいいです(これはアルゴリズムではないか分かりませんが、ははは).
    このニーズを通して、以前の頭の中で「trim中国語文字化けし」に関する曖昧な記憶もまとめた.
    需要に感謝します!
    転載先:https://www.cnblogs.com/luyuqiang/p/how-to-filter-the-end-of-the-characters.html