Zum Inhalt springen

RegEx hilfe


Empfohlene Beiträge

Hallo zusammen,

ich bräuchte ein wenig hilfe bei einer Regex.

Und zwar Suche ich einen Ausdruck (zur späteren Verwendung mit PHP) um dreifache "<br>"`s herauszufiltern. Heisst also, das ich maximal eine Leerzeile zwischen zwei elementen zulassen möchte.

Ich hab selbst so gut wie keine Erfahrung mit RegEx und wüsste auf die schnelle auch nciht wie ich das anstellen soll!

Danke im vorraus!

Link zu diesem Kommentar
Auf anderen Seiten teilen


$br = "[<br>]";
echo preg_replace("|($br{2})$br+|","\$1",$string);
[/PHP]

danke schonma,

nun bräuchte ich noch, dass er auch <br /> mit einbezieht, da ja <br> und <br /> das gleiche bewirken.

Er soll auch alle "leading" -<br>`s abschneiden.

Also heisst falls ganz am anfang welche sind, alle wegschneiden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

nun bräuchte ich noch, dass er auch <br /> mit einbezieht, da ja <br> und <br /> das gleiche bewirken.

Er soll auch alle "leading" -<br>`s abschneiden.

Für 1:

$pattern = "|(<br[ /]*>){3}|";

$replace = "<br><br>";

Für 2:

$pattern = "|^(<br[ /]*>)*(.*)$|";

$replace = "\$2";

Genauer gesagt matchen die Pattern auf alle Tags die mit <br anfangen, mit > aufhören und dazwischen beliebige Mengen Spaces und Slashes haben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Für 1:

$pattern = "|(<br[ /]*>){3}|";

$replace = "<br><br>";

Für 2:

$pattern = "|^(<br[ /]*>)*(.*)$|";

$replace = "\$2";

Genauer gesagt matchen die Pattern auf alle Tags die mit <br anfangen, mit > aufhören und dazwischen beliebige Mengen Spaces und Slashes haben.

besten dank euch allen!

Ich werds heute abend gleich ma ausprobieren!

:uli

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

also, die RegEx müsse ein wenig umgebogen werden, aber ich weiss schon wieder nicht wie :floet:

also ich möchte alle html tags ausser das img-Tag aus einem Text entfernen, und im Image tag sollen folgende eingeschaften gesetzt sein

'align="left" hspace="10"'

ist das machbar?

Danke im vorraus!

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich habs jetzt so:


$string = '<div style="text-align: center;"><img src="abc.gif" border="0" hspace="0" vspace="0"><br><br><div style="text-align: left;">Text test dasdfjkalsdf</div></div>';
$pattern = '|<img.*/?>|';
$replace = '|[^<img.+?align="left" hspace="10".+?/?>]|ms';
echo preg_replace( $pattern, $replace, $string);

/*
Ausgabe:
|[^<img. +?align="left" hspace="10" .="">]|msText test dasdfjkalsdf
*/
[/PHP]

wo is mein fehler?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Beim replace dürfen kein RegEx drin stehen. Ausserdem könnte es aktuell passieren, dass die Attribute align und hspace im Ergebnis doppelt vorkommen.

Soll denn bei allen Img-Tags diese Attribute gesetzt/ersetzt werden?

Hi Enrico,

- doppelte sollen nicht entstehen ( heisst werte überschreiben wenn vorhanden)

- hm das ganze kann bei allen images passieren, ist kein ding :)

Danke soweit.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 Monate später...

halli hallo zusammen,

ich hab neue reg ex probleme ;)

ich möchte abkürzungen im text durch einen "outputfilter" jagen und so dann mit speziellen klassen erweitern damit ich diese entsprechend per css bestimmt formatieren kann.


$subject = 'hier steht ein text, z.b. "dieser" <img src="ab.gif" alt="z.b. text"/>';
$pattern = '@z.b@i';
$replace = '<span class="shortcut">z.B.</span>';

$txt = preg_replace( $pattern, $replace, $subject);
[/PHP]

Nun ersetzt meine vorgehensweise leider auch auch das "z.b" im alt-Tag.

Dies darf nicht passieren. Es darf also nur in texten ersetzt werden die nicht zu einem tag gehören.

Danke und Gruß,

Markus

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dann mache ich es auch mal kurz:


$pattern = "@(<.+?>)($short)(</.+?)*@i";
$replace = "\$1<span class=\"shortcut\">\$2</span>\$3";
$text = preg_replace($pattern, $replace, $text);
[/PHP]

Vielleicht auch interessant:

http://de2.php.net/manual/de/function.preg-replace-callback.php

hm danke schonmal enrico.

Aber leider ist genau das gegengesetzte eingetreten was passieren soll,...

er ersetzt jetzt genau nur die shortcuts die in "" stehen.

die im fortlaufenden text lässt er unangetastet.

ich habe das ganze so eingebaut:

[PHP]
function glossar_replace( $string) {
global $REX;
$mypage = "glossar"; // only for this file
$I18N_GLOSSAR = new i18n($REX[LANG],$REX[INCLUDE_PATH]."/addons/$mypage/lang/"); // CREATE LANG OBJ FOR THIS ADDON

$sql = new sql;
$sql->setQuery("select * from rex__glossar order by shortcut");

for($i=0;$i<$sql->getRows();$i++)
{
$language = $sql->getValue("language");
if ( $language == 0) {
$language = $I18N_GLOSSAR->msg('lang_de_short');
} elseif ( $language == 1) {
$language = $I18N_GLOSSAR->msg('lang_en_short');
} else {
$language = $I18N_GLOSSAR->msg('lang_fr_short');
}

$id = $sql->getValue("short_id");
$shortcut = htmlentities($sql->getValue("shortcut"));
$description = htmlentities($sql->getValue("description"));
$language = trim( $language);

$casesense = $sql->getValue("casesense");

$search = '@(<.+?>)('. $shortcut .')(</.+?)*@';
$replace = '$1<span lang="'. $language .'" xml:lang="'. $language .'" title="'. $language .': '. $description .'" class="shortcut">$2</span>$3';
$subject = $string;

if ( $casesense == 0) {
$search .= 'i';
}

$string = preg_replace( $search, $replace, $subject);

$sql->counter++;
}

return $string;
}

siehe:

http://www.sokba.de/relaunch/index.php?article_id=57

Das Wort "Dr. Sommer" wird z.b. ersetzt

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...