Gå til innhold

Problem med linjeskift i preg_replace()


Anbefalte innlegg

Skrevet (endret)

Jeg ønsker å erstatte HTML-utsnittet under, med General:

 

<th>General</th>
</tr>
<tr>

 

Det er uaktuelt å bruke strip_tags(), da det også vil fjerne resten av HTML-koden. Jeg ønsker derfor å benytte preg_replace().

 

Jeg har prøvd følgende, men får det ikke til å fungere:

 

preg_replace("/<th>General<\/th>\n\r<\/tr>)/", "General", $html)

 

Jeg har også prøvd forskjellige versjoner med paranteser rundt \n\r, kun \n, kun \r etc. men får det ikke til å fungere. Noen som kan hjelpe?

 

 

EDIT: Dårlig emnetittel...

Endret av simenss
Videoannonse
Annonse
Skrevet

Skjønte ikke helt hva du mente med den forklaringa di, men ut i fra emnetittel tror jeg at du vil gjøre om enter-trykk til <br />?

 

 

Det kan du i hvertfall bruke nl2br på, sånn her:

<?php
$a = "MAsse
morsom, men likevel
kjedelig tekst
nedover her";
echo nl2br($a);
?>

Skrevet

Utestet

PHP

<?php

 

preg_replace("/<th>General</th></tr><tr>/im"$text);

 

?>

 

Ved å bruke m modifieren så vil den matche sjølv om teksten er på flere linjer

Skrevet
eller:

 

preg_replace("/<th>General<\/th>\r\n<\/tr>\r\n<tr>/", $text);

 

carriage return kommer før newline.

8460498[/snapback]

 

Gitt at du bruker windows-plattformen. Andre steder er linjeskift bare en enkel newline (\n), og regexen vil feile. Enkleste og beste er å bruke modifiers for å tillate linjeskift, evt. bruke en .

Skrevet (endret)
Utestet

PHP

<?php

 

preg_replace("/<th>General</th></tr><tr>/im", $text);

 

?>

 

Ved å bruke m modifieren så vil den matche sjølv om teksten er på flere linjer

8459883[/snapback]

Takk for svar. Har prøvd følgende kode:

 

<?php
$text = '<table>
<tr>
<th>General</th>
</tr>
<tr>
</table>';

print(preg_replace("/<th>General<\/th><\/tr><tr>/im", NULL, $text));
?>

 

Den returnerer likevel hele HTML-koden. Om jeg fjerner <\/tr><tr> fra det regulære uttrykket, fjerner den <th>General</th>. Dette holder dessverre ikke for meg, så linjeskiftene er fortsatt et problem.

Endret av simenss
Skrevet

Fikk det til med:

 

<?php
$text = '<table>
<tr>
<th>General</th>
</tr>
<tr>
</table>';

print(preg_replace("/<th>General<\/th>.<\/tr>.<tr>/s", NULL, $text));
?>

 

S modifieren gjør at jeg kan plassere punktum (.) der hvor det er linjeskift. En mer "delikat" løsning hadde likevel vært om den ignorerte linjeskiftene slik Shadows0 prøvde å forklare.

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...