/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
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




Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste