Ich habe eine Variable $content
enthält einen Absatz von gemischten Text und HTML-Tags img und URLs.Wie man bedingten Regex globalen Ersatz mit Perl machen?
Ich möchte bedingte String-Injektion machen, um etwas Ersatz zu tun.
Angenommen, $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">
enthält würde ich $content
bearbeiten möchten und machen es
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">
ich eine Liste von regex Bedingungen für URLs zu halten: die genannten weißen Liste Streichhölzer. Jede andere Bild-URL als die Whitelist wird mit einem Wrapper-URL-Präfix bearbeitet.
Meine Idee war:
if image tags matched in $content {
if match is in 'whitelist'
do nothing
else
inject prefix replacement
}
Ich weiß nicht, wie bedingten regex globalen Ersatz zu machen, da alles in einem einzeiligen String-Variable ist.
Ich muss dies in Perl implementieren.
Zusätzliche Informationen:
Meine 'Whitelist' sind nur noch 5 Zeilen, im Grunde enthält Schlüsselwort und Domänen.
Hier ist, was ich für den Abgleich der "Whitelist" getan habe.
z.
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
}
Eine nicht ganz so elegant Lösung, die ich denken kann, ist alle img Urls mit dem Präfix Injektion global ersetzen.
Führen Sie dann einen weiteren globalen Ersatz durch, um das Präfix durch einen Abgleich mit der "Whitelist" zu entfernen.
Gibt es eine effizientere Lösung für mein Problem?
Danke.
Sie müssen wirklich einen richtigen HTML-Parser für diese. Bitte zeigen Sie ein Beispiel Ihrer * Liste der Regex-Bedingungen * – Borodin
Ursprüngliche Frage geändert mit einigen Regex-Bedingungen, die ich verwendet habe, um für die "Whitelist" zu überprüfen, um zu behalten. – KDX