|
| Regulært udtryk Fra : Jimmy |
Dato : 30-12-03 23:07 |
|
Hej
Jeg forsøger at skrive et regexp, som kan erstatte alle linieskift med <br>.
Linieskift kan være (\n|\r|\r\n)
Udfordringen er at den ikke må erstatte linieskift der kommer efter et
HTML-tag.
Jeg mener man kan identificere disse ved hjælp af nedenstående:
[^>](\n|\r|\r\n)
Men hvordan kombineres de to udsagn, så jeg fjerner alle linieskift, som
ikke har en > foran?
Jeg fandt kun en OR operator (pipe), men ikke nogen AND operator og hverken
& eller && kunne jeg få til at fungere.
Mvh
Jimmy
| |
Kim Schulz (30-12-2003)
| Kommentar Fra : Kim Schulz |
Dato : 30-12-03 23:58 |
|
On Tue, 30 Dec 2003 23:07:23 +0100
"Jimmy" <nyhedsgruppe2@get2net.danmark> wrote:
> Hej
>
> Jeg fors_ger at skrive et regexp, som kan erstatte alle linieskift med
> <br>. Linieskift kan v_re (\n|\r|\r\n)
>
> Udfordringen er at den ikke m_ erstatte linieskift der kommer efter et
> HTML-tag.
> Jeg mener man kan identificere disse ved hj_lp af nedenst_ende:
>
> [^>](\n|\r|\r\n)
>
> Men hvordan kombineres de to udsagn, s_ jeg fjerner alle linieskift,
> som ikke har en > foran?
>
> Jeg fandt kun en OR operator (pipe), men ikke nogen AND operator og
> hverken& eller && kunne jeg f_ til at fungere.
måske noget ala:
/(?!>)(\n|\r|\r\n)/
søg efter negative lookbehind i perlre tut
| |
Jimmy (31-12-2003)
| Kommentar Fra : Jimmy |
Dato : 31-12-03 02:49 |
|
"Kim Schulz" <kim@schulz.dk> wrote in message
news:20031230235825.2741c0ee.kim@schulz.dk...
On Tue, 30 Dec 2003 23:07:23 +0100
> måske noget ala:
> /(?!>)(\n|\r|\r\n)/
Giver følgende test-resultat:
hej med dig
<br>
<br><table border='0' width='100%'>
<br> <tr><td align='right'>HEJ</td></tr>
<br></table>
> søg efter negative lookbehind i perlre tut
Jeg ser på det - Måske man også kan gruppere og bruge back references.
Tak,
Jimmy
| |
Lars Balker Rasmusse~ (31-12-2003)
| Kommentar Fra : Lars Balker Rasmusse~ |
Dato : 31-12-03 10:23 |
|
"Jimmy" <nyhedsgruppe2@get2net.danmark> writes:
> Jeg forsøger at skrive et regexp, som kan erstatte alle linieskift med <br>.
> Linieskift kan være (\n|\r|\r\n)
>
> Udfordringen er at den ikke må erstatte linieskift der kommer efter et
> HTML-tag.
> Jeg mener man kan identificere disse ved hjælp af nedenstående:
>
> [^>](\n|\r|\r\n)
>
> Men hvordan kombineres de to udsagn, så jeg fjerner alle linieskift, som
> ikke har en > foran?
>
> Jeg fandt kun en OR operator (pipe), men ikke nogen AND operator og hverken
> & eller && kunne jeg få til at fungere.
Nu skriver du ikke om du har hele strengen i en variabel eller tager
en linie ad gangen.
Hvis du har en linie ad gangen er det nemmeste:
s/>$/>/ || s/$/<br>/
Ellers må man jo lave så man tager en linie ad gangen:
$old = "hej med dig\n<a>\n<table>\r\n<a>\rhest";
foreach (split /\r\n|\n|\r/, $old) {
s/>$/>\n/ || s/$/<br>\n/;
$new .= $_;
}
print $new;
--
Lars Balker Rasmussen Consult::Perl
| |
Jimmy (31-12-2003)
| Kommentar Fra : Jimmy |
Dato : 31-12-03 13:15 |
|
"Lars Balker Rasmussen" <lars@balker.org> wrote in message
news:0fvfnxs5m6.fsf@laphroaig.balker.org...
> "Jimmy" <nyhedsgruppe2@get2net.danmark> writes:
> > Jeg forsøger at skrive et regexp, som kan erstatte alle linieskift med
<br>.
> > Linieskift kan være (\n|\r|\r\n)
> >
> > Udfordringen er at den ikke må erstatte linieskift der kommer efter et
> > HTML-tag.
> > Jeg mener man kan identificere disse ved hjælp af nedenstående:
> >
> > [^>](\n|\r|\r\n)
> >
> > Men hvordan kombineres de to udsagn, så jeg fjerner alle linieskift, som
> > ikke har en > foran?
> >
> > Jeg fandt kun en OR operator (pipe), men ikke nogen AND operator og
hverken
> > & eller && kunne jeg få til at fungere.
>
> Nu skriver du ikke om du har hele strengen i en variabel eller tager
> en linie ad gangen.
Jeg har det som een stor streng taget fra en database.
> Hvis du har en linie ad gangen er det nemmeste:
>
> s/>$/>/ || s/$/<br>/
Jeg må indrømme jeg ikke helt forstår hvad der står, men det jeg tror jeg
forstod gav mig en ide.
Jeg erstatter alle >\n med >.
På den måde er al HTML nu på een lang linie, hvilket er fint nok da det kun
er en browser der skal fortolke det.
Alle \n kan nu erstattes med <br> og jeg har en fint formateret tekst med
HTML, som der ikke gøres noget ved.
Mange tak for hjælpen - Beklager jeg ikke brugte dit fine eksempel.
Mvh
Jimmy
| |
|
|