【PHP Telegram Bot】Day27 - 防雷机器人(1):让发出去的讯息隐藏吧

https://ithelp.ithome.com.tw/upload/images/20211006/20132916FjcYRire9H.png

有时候看动画或小说看到很劲爆的地方,很想讲但又不能明讲,有防雷机器人的话就会很方便

来做一个可以用 * 符号标示要隐藏的字的机器人,安安*你*好 -> 安安█好,还有 * 符号前面是反斜线时跳过,安\*安你好 -> 安*安你好

把 *中间* 的文字找出来

要找到两个 * 符号中间的文字满容易的,用正规表示式 /\*(.*)\*/U 就能找出来,然後加上 lookbehind (?<!) 跳过前面有反斜线的,最後组合起来就像这样 /(?<!\\)\*(.*)(?<!\\)\*/U

在 PHP 的字串中两个反斜线 \\ 会变成一个反斜线 \,所以在 preg_match_all() 中要打四个反斜线 \\\\ 这样才是 \\
https://ithelp.ithome.com.tw/upload/images/20211006/20132916mwNC3Ge76v.png
我们来看看有没有抓对
https://ithelp.ithome.com.tw/upload/images/20211006/20132916U2XW4T0bKD.png
抓到之後要先做一些处理,我们要把抓到的字串中间的反斜线去掉
https://ithelp.ithome.com.tw/upload/images/20211006/20132916pwBTR3qOgD.png
$search 是待会要替换「原始字串」时用来作为「被替换字串」的,所以不做任何处理,$replace 就是去掉後的样子
https://ithelp.ithome.com.tw/upload/images/20211006/20132916dXDLAwH7HK.png


把 *中间* 的文字换成黑框框

清乾净後是把每个字都换成黑框框,作为待会「替换成的字串」
https://ithelp.ithome.com.tw/upload/images/20211006/20132916LC6gQvNU3E.png
黑黑一坨啥都看不见
https://ithelp.ithome.com.tw/upload/images/20211006/20132916al4n3EYI0U.png
既然两种字串都蒐集到了,那当然就是把「原始字串」替换成一堆黑框框的字串啦

我们会需要两种替换,一是只把 *中间* 的字换成黑框框,另一种是不管遇到什麽字都换成黑框框
https://ithelp.ithome.com.tw/upload/images/20211006/20132916lJIHXFX2lB.png
替换的结果
https://ithelp.ithome.com.tw/upload/images/20211006/20132916U9Ea5ESa4w.png


修改 processInlineQuery

再来就是要把这些换来换去的东东放进 processInlineQuery 啦

首先如果查询的字串是空字串就显示查看说明
https://ithelp.ithome.com.tw/upload/images/20211006/201329162qJhMInmRD.png
否则就来做字串替换,把刚刚那些东东塞进去
https://ithelp.ithome.com.tw/upload/images/20211006/20132916GN1dvsmOxL.png
最後是把 $results 做出来,如果 $search 不是空阵列,而且替换完的字串 $text_hide 不是空字串,那就回传两个结果,不然就只回传 $text_hide_all
https://ithelp.ithome.com.tw/upload/images/20211006/20132916pNqnmBt1ag.png
写完就可以来看看成果啦
https://ithelp.ithome.com.tw/upload/images/20211006/20132916Vq1uLHKz4b.png


<<:  [Day21]DML语句

>>:  Backtrader - 指标使用

批次转换Excel格式, 由xls转为xlsx

**批次转换Excel存档格式, 由xls转为xlsx xls格式是Excel2003及以前的Exc...

【Day 19】- 让 Selenium 去 Dcard 上爬文! (实战 Selenium 模拟使用者划手机 1/2)

前情提要 前一篇与大家介绍了 Selenium 的基本运用,并在补充资料中给予了语法的资源。 开始之...

30天学习笔记 -day 30 -感言

LAST Day 终於到了铁人赛的最後一天,过程中复习了不少的东西,对某些用法有了更加的认识,过程中...

Day 10 号志的作用

在Kernel里面有一项功能,就是所谓的号志(semaphore)的功能,里面包括: 1.号志控制区...

App 开发经营管理(ㄧ)

APP 营运思考 了解开发 APP 目的,不要为了做 App 而做 确认开发需求 商业目标 开发成本...