gpt4 book ai didi

regex - 继续在 perl 中换行

转载 作者:行者123 更新时间:2023-12-02 08:27:05 25 4
gpt4 key购买 nike

我有这样的 perl 脚本:

elsif ($url =~ m/^(http|https):\/\/(banner(s?)|advertising|iklan|adsbox|adserver|adservice(s?))\.(.*)/) {
print "http:\/\/ip\.mdm\-lo\-00\.willsz\.net/null\.png\n";
}

这对重定向 squid(一行)有效,但如果像这样更改为多行,则绝对无效。

elsif ($url =~ m/^(http|https):\/\/(banner(s?) \
|advertising \
|iklan \
|adsbox \
|adserver \
|adservice(s?))\.(.*)/) {
print "http:\/\/ip\.mdm\-lo\-00\.willsz\.net/null\.png\n";
}

有什么建议吗? - 谢谢

最佳答案

您对转义符和圆括号有点着迷了!将分隔符更改为 {...} 之类的东西要简单得多,它不在模式的主体中;那么你不必转义斜杠

除非您使用 /x 修饰符,否则所有空格在正则表达式模式中都很重要,包括换行符,转义它们根本没有区别。这不是 C!

除非您需要捕获匹配模式的子字符串,否则您还应该使用非捕获括号,如 (?:...)

而且不需要一次性的.*来匹配字符串的尾部,除非你需要匹配并捕获它以供进一步使用

最好的选择是使用 m{...}x。然后你可以根据需要添加空格、制表符和换行符,使模式更清晰

并且在双引号字符串中根本不需要反斜杠,除非您想添加特殊字符,例如 \t 用于制表符,\n 用于换行符等。

这段代码应该做你想做的

elsif ( $url =~ m{ ^ https?:// (?:
banners? |
advertising |
iklan |
adsbox |
adserver |
adservices? ) \. }x ) {

print "http://ip.mdm-lo-00.willsz.net/null.png\n";
}

关于regex - 继续在 perl 中换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31230896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com