Någon snäll RegExp-kille (Robban? :e) som kan hjälpa mig med ett trivialt RegExp-problem:
Jag vill i en given sträng ta bort alla html-taggar förutom <br> och <p>, dessa skall vara kvar i oförändrad form. Jag vill alltså inte ersätta html-taggarna med något utan jag vill helt och hållet utplåna dom från strängen... Hur göra?
------------------
° 4711 - the number of the geek °
RobbanMedlem sedan dec. 19992 555 inlägg Om den givna strängen är $string:
$string =~ s{<(?!(p|/p|br)).*?>}{}igs;
En förklaring kanske? :)
<(?!(p|/p|br))
Matcha alla '<' som inte följs av 'p', '/p' eller 'br' (i:et på slutet gör att ingen skillnad görs mellan stora och små bokstäver).
.*?>
Samt matcha alla tecken fram till och inkluderande nästa '>' (s:et på slutet gör att även radmatningar inkluderas).
Det som matchas ersätts med ingenting ({}). Sedan gör g:et på slutet att matchningen blir global (d.v.s. innefattar alla HTML-taggar, inte bara den första).
------------------
Robban < robban@lipogram.com >
[Redigerat av Robban den 30 aug 2000]
Du är en äkta RegExp-gud! Jag knöböjer vid dina fötter! :e
Tack!
------------------
° 4711 - the number of the geek °
RobbanMedlem sedan dec. 19992 555 inlägg Hittade ett fel i uttrycket. Som det står släpps t.ex. även <pre></pre> igenom. Kanske inte så bra. :)
Ändra till:
$string =~ s{<(?!(p>|/p>|br> )).*?>}{}igs;
------------------
Robban < robban@lipogram.com >
Återigen tack!
------------------
° 4711 - the number of the geek °
RobbanMedlem sedan dec. 19992 555 inlägg Fel igen. Men den här gången är det inte orsakat av mig. :)
Ser nu att forumscriptet petat in ett mellanslag efter br>. Det skall inte vara där.
------------------
Robban < robban@lipogram.com >