【发布时间】:2016-04-03 16:58:41
【问题描述】:
我有一个变量$content,其中包含一段混合文本和 HTML img 标签和 URL。
我想进行条件字符串注入来做一些替换。
例如,假设$content包含
ABC <img src="http://url1.com/keep.jpg">
DEF <img src="http://random-url.com/replace.jpg">
GHI <img src="http://url2.com/keep.jpg">
我想编辑$content 并制作它
ABC <img src="http://url1.com/keep.jpg">
DEF <img src="http://wrapper-url.com/random-url.com/replace.jpg">
GHI <img src="http://url2.com/keep.jpg">
我有一个要保留的 URL 正则表达式条件列表:上述 白名单匹配。白名单以外的任何图片 URL 都将使用 wrapper-url 前缀进行编辑。
我的想法是:
if image tags matched in $content {
if match is in 'whitelist'
do nothing
else
inject prefix replacement
}
我不知道如何进行条件正则表达式全局替换,因为所有内容都在单行字符串变量中。
我需要在 Perl 中实现这个。
附加信息:
我的“白名单”目前只有 5 行,基本上包含关键字和域。
这是我为匹配“白名单”所做的工作。
例如。
if ($_ =~ /s3\.static\.cdn\.net/) {
# whitelist to keep, subdomain match
}
elsif ($_ =~ /keyword-to-keep/) {
# whitelist to keep, url keyword match
}
elsif ($_ =~ /cdn\.domain\.com/) {
# whitelist to keep, subdomain match
}
elsif ($_ =~ /whitelist-domain\.net/) {
# whitelist to keep, domain match
}
elsif ($_ =~ /i\.whitelist-domain\.com/) {
# whitelist to keep, subdomain match
}
else {
# matched, do something about it with injection
}
我能想到的一个不太优雅的解决方案是用前缀注入全局替换所有 img url。
然后再进行一次全局替换,通过匹配“白名单”来移除前缀。
我的问题有更有效的解决方案吗?
谢谢。
【问题讨论】:
-
你真的需要一个合适的 HTML 解析器。请出示您的正则表达式条件列表示例
-
原始问题修改了一些正则表达式条件,我一直在使用它来检查要保留的“白名单”。