有時候看動畫或小說看到很勁爆的地方,很想講但又不能明講,有防雷機器人的話就會很方便
來做一個可以用 * 符號標示要隱藏的字的機器人,安安*你*好 -> 安安█好,還有 * 符號前面是反斜線時跳過,安\*安你好 -> 安*安你好
要找到兩個 * 符號中間的文字滿容易的,用正規表示式 /\*(.*)\*/U
就能找出來,然後加上 lookbehind (?<!)
跳過前面有反斜線的,最後組合起來就像這樣 /(?<!\\)\*(.*)(?<!\\)\*/U
在 PHP 的字串中兩個反斜線 \\
會變成一個反斜線 \
,所以在 preg_match_all()
中要打四個反斜線 \\\\
這樣才是 \\
我們來看看有沒有抓對
抓到之後要先做一些處理,我們要把抓到的字串中間的反斜線去掉$search
是待會要替換「原始字串」時用來作為「被替換字串」的,所以不做任何處理,$replace
就是去掉後的樣子
清乾淨後是把每個字都換成黑框框,作為待會「替換成的字串」
黑黑一坨啥都看不見
既然兩種字串都蒐集到了,那當然就是把「原始字串」替換成一堆黑框框的字串啦
我們會需要兩種替換,一是只把 *中間* 的字換成黑框框,另一種是不管遇到什麼字都換成黑框框
替換的結果
再來就是要把這些換來換去的東東放進 processInlineQuery 啦
首先如果查詢的字串是空字串就顯示查看說明
否則就來做字串替換,把剛剛那些東東塞進去
最後是把 $results
做出來,如果 $search
不是空陣列,而且替換完的字串 $text_hide
不是空字串,那就回傳兩個結果,不然就只回傳 $text_hide_all
寫完就可以來看看成果啦