#1 - 2024-7-26 02:46
Wanten
这是已知问题吗?

https://bgm.tv/blog/342058

这导致任何携带了 bgm-tv、bangumi-tv、chii-in 的链接都将定向到错误的地方。

比如 @bangumi大西王 的脚本仓库脚本仓库

原链接:

https://github.com/trim21/bgm-tv-userscripts
#2 - 2024-7-26 14:39
(‮✩ ‭<ゝω・)
看上去原本是想把 bangumi.tv 和 chii.in 统一转写为 bgm.tv 的功能,像是匹配出了问题。
`.` (英文句点) 是正则里的单字符的通配符

大胆猜想,原本想写 `bangumi\.tv` 之类的正则规则写成了 `bangumi.tv`
(其实应该也要限制只匹配协议头后面的域名部分的来着……

原地求证环节:
https:// bgmatv  (链接) ( bgmatv 变成了 bgm.tv )
https:// bgm1tv  (链接) ( bgm1tv 变成了 bgm.tv )
#3 - 2024-7-26 18:02
(天生万物以养人,人无一物以报天)
这个正则是这样的


"/((?:www.)?(?:(bgm\.tv|chii\.in|bangumi\.tv)))+/i"


感觉好像没啥问题?

这部分代码:

https://gist.github.com/trim21/5ed382bf8b8035e52d9f2f3b18c16d33
#3-1 - 2024-7-26 18:48
豆沙包罐头
不懂你们php,改成
bgm\\.tv|chii\\.in|bangumi\\.tv

康康?
#3-2 - 2024-7-26 21:04
bangumi大西王
豆沙包罐头 说: 不懂你们php,改成
bgm\\.tv|chii\\.in|bangumi\\.tv
康康?
我也不懂,等个懂的来修吧
#3-3 - 2024-7-26 21:12
豆沙包罐头
bangumi大西王 说: 我也不懂,等个懂的来修吧
我当它C++了,在我这里试了一下这样能行

应该是因为需要一个\来转义\,写成\\.才会被认为是\.
#4 - 2024-7-27 00:42
(Awesome!)
上面正则没错,是另一个替换的地方错了,拼接的正则的域名没转义:

$replace_domains = array('www.chii.in', 'www.bangumi.tv', ...);
$conv_regex = '/'.implode('|', $replace_domains).'/i';


Fix:
$conv_regex = '/'.implode('|', array_map('preg_quote', $replace_domains)).'/i';