Regulärer Ausdruck, quasi "p2br"
Gero
- php
Hallo Forum,
ich möchte wie folgt zum Beispiel dies hier (INhalt von $inhalt):
<P id="TEST">Hier kommt ein Beispieltext</p>
durch folgendes ersetzen:
Hier kommt ein Beispieltext<br />
Also ähnlich der nl2br-Funktion, nur eben p2br. Wie mache ich das mit einer RegEx?
$inhalt = preg_replace("<P>(.*)</P>", "$1<br />", $inhalt);
^^^^^^^^^^^ ^^^^^^^^
funktioniert gar nicht. Also, noch mal die gewünschten Spezifikationen:
* case-insensitiv
* Beliebig viele Attribute innerhalb von <P> sollen ebenfalls egal sein.
Bitte, helft mir!
Gruesse
G e r o
Ein ähnliches problem hatt ich auch als ich die bb-code listen in html umsetzen wollte *g*
ich denk mal es wäre wesentlich einfach die ganze seite mit strpos() zu nach </p> durchsuchen und mit <br /> zu ersetzen, und anschließend alle <p> einfach zu löschen,...
Hi Montgomery,
ich denk mal es wäre wesentlich einfach die ganze seite mit strpos() zu nach </p> durchsuchen und mit <br /> zu ersetzen, und anschließend alle <p> einfach zu löschen,...
nicht, wenn die <p>-Elemente noch zusätzliche Attribute haben. Da muss ein regulärer Ausdruck ran.
Viele Grüße
Benjamin
Hi Montgomery,
ich denk mal es wäre wesentlich einfach die ganze seite mit strpos() zu nach </p> durchsuchen und mit <br /> zu ersetzen, und anschließend alle <p> einfach zu löschen,...
Wenn dann andersrum, weil manche leute bzw programme machen nur ein <p> und denken, man muss das nicht mehr schließen...
Gruß, Marian
Hi Gero,
<P id="TEST">Hier kommt ein Beispieltext</p>
durch folgendes ersetzen:
Hier kommt ein Beispieltext<br />
[...]
$inhalt = preg_replace("<P>(.*)</P>", "$1<br />", $inhalt);
* case-insensitiv
* Beliebig viele Attribute innerhalb von <P> sollen ebenfalls egal sein.
Versuchs mal hiermit:
$text = '<P id="TEST">Beispieltext</P>';
$expr = '/<p.*>(.*)<\/p>/i';
$repl = preg_replace($expr, '$1<br />', $text);
Ich empfehle weiterhin dringend die Lektüre von mindestens http://de.selfhtml.org/perl/sprache/regexpr.htm.
Viele Grüße
Benjamin
Hi Benjamin,
Versuchs mal hiermit:
$text = '<P id="TEST">Beispieltext</P>';
$expr = '/<p.>(.)</p>/i';
$repl = preg_replace($expr, '$1<br />', $text);
Du bist mein Retter! ;-) Funktioniert prächtig.
> Ich empfehle weiterhin dringend die Lektüre von mindestens <http://de.selfhtml.org/perl/sprache/regexpr.htm>.
Schon gebookmarkt und zur Lektüre vorgesehen ;-)
Danke vielmals,
Gero
Hi,
hab hier mal ne beispiel funktion, ist sicher nicht das gelbe vom ei, zumal sie nur einen durchlauf macht aber mal ein anfang.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<title>New Document</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?
$zeile = '<P id="TEST">Hier kommt ein Beispieltext</P>';
echo $zeile;
function p2br($string)
{
$position_start = strpos($string, "<P");
if($position_start === 0 || $position_start >= 1)
{
$position_ende = strpos($string, ">");
while($position_ende < $position_start)
{
$string = substr_replace($string, "[dreieckzu]", $position_ende, 1);
$position_ende = strpos($string, ">");
$position_start = strpos($string, "<P");
}
$laenge = $position_ende-$position_start+1;
$string = substr_replace($string, "", $position_start, $laenge);
$string = str_replace("</P>", "<br />", $string);
$string = str_replace("[dreieckzu]", ">", $string);
}
return $string;
}
$zeile = p2br($zeile);
echo $zeile;
?>
</body>
</html>
Hi,
function p2br($string)
{
$position_start = strpos($string, "<P");
if($position_start === 0 || $position_start >= 1)
{
$position_ende = strpos($string, ">");
while($position_ende < $position_start)
{
$string = substr_replace($string, "[dreieckzu]", $position_ende, 1);
$position_ende = strpos($string, ">");
$position_start = strpos($string, "<P");
}
$laenge = $position_ende-$position_start+1;
$string = substr_replace($string, "", $position_start, $laenge);
$string = str_replace("</P>", "<br />", $string);
$string = str_replace("[dreieckzu]", ">", $string);
$string_return = p2br($string);
if(!$string_return)
{
return $string;
}
else
{
return $string_return;
}
}
return false;
}
diese funktion ersetzt beliebig viele p's ist kein p vorhanden wird false zurueckgegeben deshalb empfiehlt sich der aufruf über
$zeile_neu = p2br($zeile);
if(!$zeile_neu)
{
// keine p's
}
else
{
// in $zeile neue sind die p's durch br's ersetzt
}
Der code ist sicherlich noch verbesserungswürdig, vll kommt von dem einen oder andern noch was.
MfG
Hi Daniel,
[ganz viel Quellcode]
Viele Grüße
Benjamin