regex: Absatz finden und in <p> einfügen
split.s
- perl
ich suche nach einem regex der Absätze in einem $string findet und diesen dann entsprechend mit <p> klammert.
Das Problem: Der Text stammt aus Usereingaben, das heisst es können teilweise auch viele Newline-Zeichen in Folge auftreten die dann aber nur zu einem Absatz führen sollen.
Hier mal ein Beispiel:
Dies ist ein Text
Dies ist ein Absatz nach zwei Newlines
Ein weiterer Absatz
Noch ein Absatz
Das ganze sollte dann später mal so aussehen:
<p>Dies ist ein Text</p>
<p>Dies ist ein Absatz nach zwei Newlines</p>
<p>Ein weiterer Absatz</p>
<p>Noch ein Absatz</p>
Wie könnte man sowas in PERL umsetzen?
Bin für jeden Tipp, egal wie klein, dankbar!
In regulären Ausdrücken war ich schon immer voll die Niete :D
Grüße,
müssen es reguläre ausdrücke sein? doppelte newlines durch </p></p> zu ersetzen wäre nicht ok?
MFG
bleicher
Ich brauche das komplett in <p></p> damit ichs formatieren kann. Ich will ja auch schönes HTML haben.
hi,
Wie könnte man sowas in PERL umsetzen?
my $s = qq(
eins
zwei
drei
);
$s =~ s/^\s+|\s+$//; # trim
my @txt = split /\n+/, $s; # an Zeilenumbruch splitten
print "<p>".join("</p>\n<p>", @txt)."</p>", "\n";
Hotti
Das ganze sollte dann später mal so aussehen:
<p>Dies ist ein Text</p>
<p>Dies ist ein Absatz nach zwei Newlines</p>
<p>Ein weiterer Absatz</p>
<p>Noch ein Absatz</p>
>
> Wie könnte man sowas in PERL umsetzen?
`my $out = join('', map{ '<p>'.$_."</p>\n" } split( /\n{2,}/, $in ) );`{:.language-perl}
mfg Beat
--
><o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Der Valigator leibt diese Fische
Das ganze sollte dann später mal so aussehen:
<p>Dies ist ein Text</p>
<p>Dies ist ein Absatz nach zwei Newlines</p>
<p>Ein weiterer Absatz</p>
<p>Noch ein Absatz</p>
> >
> > Wie könnte man sowas in PERL umsetzen?
>
> `my $out = join('', map{ '<p>'.$_."</p>\n" } split( /\n{2,}/, $in ) );`{:.language-perl}
>
> mfg Beat
im prinzip genau was ich haben wollte :) Aber wie kann ich jetzt noch integrieren, dass er nur ein einzelnes Newline durch ein <br /> ersetzt?
my $out = join('', map{ '<p>'.$_."</p>\n" } split( /\n{2,}/, $in ) );
mfg Beat
im prinzip genau was ich haben wollte :) Aber wie kann ich jetzt noch integrieren, dass er nur ein einzelnes Newline durch ein <br /> ersetzt?
my $out = join('', map{
s#\n#<br \>#g;
'<p>'.$_."</p>\n"
} split( /\n{2,}/, $in ) );
mfg Beat
Danke, jetzt klappts wirklich prima :)
Ich zerbrech mir schon seit gestern die Birne darüber und hatte deshalb kaum Schlaf heut nacht. Ich bin wirklich dankbar, nicht dass es jetzt so aussieht als hätte ich euch jetzt hier ausgenutzt oder so.
Danke nochmals