Seite 1 von 2
preg_replace: Alle "nicht-Buchstaben" ersetzen.
Verfasst: 28.07.2005, 14:53
von mcchaos
Argh, es ist bestimmt ganz easy, aber ich komme nicht drauf.
Ich möchte alle Nicht-Buchstaben aus einer Zeichenfolge durch "*" ersetzen. Ich bin gelandet bei:
$sWord = preg_replace("/[A-Z a-z]/", "*", $sWord);
... was mir alle Buchstaben ersetzt. Wir kriege ich nun da noch das "Nicht" mit rein?
Grüße
Martin
Verfasst:
von
SEO Consulting bei
ABAKUS Internet Marketing Erfahrung seit 2002
- persönliche Betreuung
- individuelle Beratung
- kompetente Umsetzung
Jetzt anfragen:
0511 / 300325-0.
preg_replace: Alle "nicht-Buchstaben" ersetzen.
Verfasst: 28.07.2005, 15:40
von LinkPop
$sWord = preg_replace("/[^A-Z a-z]/", "*", $sWord);
oder
$sWord = preg_replace("/[^a-z]/i", "*", $sWord);
preg_replace: Alle "nicht-Buchstaben" ersetzen.
Verfasst: 28.07.2005, 15:43
von net(t)worker
$sWord = preg_replace("/[^A-Za-z]/", "*", $sWord);
preg_replace: Alle "nicht-Buchstaben" ersetzen.
Verfasst: 28.07.2005, 15:49
von mcchaos
Danke!!
Ich dachte immer, ^ gibt den Zeilenanfang an...
Re: preg_replace: Alle "nicht-Buchstaben" ersetzen
Verfasst: 28.07.2005, 15:54
von robo
mcchaos hat geschrieben:Ich dachte immer, ^ gibt den Zeilenanfang an...
Kommt auf den Kontext an. Am Anfang einer Zeichenklasse angegeben bedeutet es "nicht".
cu, Robo

preg_replace: Alle "nicht-Buchstaben" ersetzen.
Verfasst: 28.07.2005, 16:39
von OnkelHotte
Ich verzweifel hier auch gerade:
ich würde gern [link=abc.com] in dem String "ich bin ein link zu [link=abc.com] und ganz supi toll" ersetzen, aber ein Ansatz zu einer Lösung ist mir da noch nicht eingefallen.
Um die Sache noch komplizierter zu machen, muss ich auch noch "ich bin ein weiterer Link zu [extern=
https://www.extern.de]einer externen site[/extern], die nicht so supi ist" ersetzen.
*amkopfkrabbelndundnichtweiterkommend*
preg_replace: Alle "nicht-Buchstaben" ersetzen.
Verfasst: 28.07.2005, 18:08
von bsnoop
Durch was denn ersetzen?
preg_replace: Alle "nicht-Buchstaben" ersetzen.
Verfasst: 28.07.2005, 18:37
von net(t)worker
/\[link=([^\]]*)\]/
/\[extern=([^\]]*)\]([^\[]*)\[\/extern\]/
soetwas in der Art?
preg_replace: Alle "nicht-Buchstaben" ersetzen.
Verfasst: 29.07.2005, 07:25
von OnkelHotte
Super. Das funktioniert:
preg_replace ("/\[link=([^\]]*)\]/", "<a href=\"http://\\1\">\\1</a>", $string);
und wie es so in einer Datenbank ist, die von Kunden selbst gefüttert wird, ist der link mal mit uns mal ohne "http://". Ausserdem soll der Link nur kleinschrift sein.
Wenn ich jetzt eine Ersetzung versuche, kommt dabei nur Käse heraus:
[link=abc.com] wird zu <a href="http://'.str_replace('http://','','abc.com').'">'strtolower(abc.com).'</a>
preg_replace("/\[link=([^\]]*)\]/", "<a href=\"http://'.str_replace('http://','','\\1').'\">'strtolower(\\1).'</a>", $string);
Sie, Computer == weiblich, will mir einfach nicht die Funktionen abnehmen und ich weiss nicht, woran es liegen kann.

preg_replace: Alle "nicht-Buchstaben" ersetzen.
Verfasst: 29.07.2005, 08:08
von pi-de
Versuch mal:
$search = "/\[link=([^\]]*)\]/U";
$replace = "<a href=\"https://".str_replace('http://','','\\1')."\">".strtolower(\\1)."</a>";
preg_replace($search, $replace, $string);
preg_replace: Alle "nicht-Buchstaben" ersetzen.
Verfasst: 29.07.2005, 09:49
von net(t)worker
while ( preg_match("/^(.*)\[link=([^\]]*)\](.*)$/s", $string, $gefunden))
{
$url = $gefunden[2];
$url = strtolower($url);
if (substr($url,0,7) != 'http://') { $url = "https://".$url; }
$string = $gefunden[1]."<a href=\"$url\">$url<\a>".$gefunden[3];
}
so sollte es gehen...
preg_replace: Alle "nicht-Buchstaben" ersetzen.
Verfasst: 14.09.2005, 16:46
von Pretender
Ich habe auch ein kleineres Problem und benötige mal einen Tipp.
Ich haben eine Beschreibung. Jede Zeile ist durch ein ; beendet . Der Nachteile ist, daß der Text hinter einandere weg steht. Also habe ich flux
$text = ereg_replace(";"," <br> ",$d);
reingebaut und siehe da, nach jeder Beschreibungszeile, steht ein <br> dahinter
Also so z.B.
Beschreibung:
Grafik-Controller: Intel GMA 900
Herstellergarantie: 1 Jahr Garantie
Kartenleser: 6-in-1
Lokalisierung: Deutsch / Deutschland
Mobiltechnologie: Intel Centrino
Leider taucht jetzt ein anderes Problem dafür auf!
Thema Sonderzeichen: Da ich jetzt die ; durch ein <br> ersetzen will, wird bei den Sonderzeichen folglich auch ein <br> reingeknallt, da diese ja bekanntlich mit einem ; enden wie hier z.B. " was für eine " steht.
Ich muss also diese Sonderzeichen vom Ersetzen ausschließen.
Wie muss ich die Zeile ändern um zum Beispiel die Sonderzeichen
" und ä
vom Suchen und Ersetzen auszuschließen?
$text = ereg_replace("; "," <br> ",$d);
Hinter dem Ersten ; steht absichtlich eine Leerstelle, da sich diese nach jedem ; was ersetzt werden soll befindet. Das ist vieleicht hilfreich.
preg_replace: Alle "nicht-Buchstaben" ersetzen.
Verfasst: 14.09.2005, 17:29
von net(t)worker
Code: Alles auswählen
<?php
$text= "text1 ";\ntext2 " text2;\ntext 3;";
$text2=preg_replace("/^(.*);$/m","\\1<br>",$text);
print $text2;
?>
entfernt nur ein ; am zeilenende....

preg_replace: Alle "nicht-Buchstaben" ersetzen.
Verfasst: 15.09.2005, 00:43
von csx
Das geht bestimmt auch mit einem Regex-Einzeiler, aber so ist es vielleicht übersichtlicher:
Code: Alles auswählen
<?php
$text= "text1 "; text2 " text2; text 3; ";
$text = preg_replace("<(\&[#a-z0-9]{2,10});>i", "$1\\;", $text);
$text = preg_replace("<([^\\\]);>", "$1 <br> ", $text);
$text = preg_replace("<(\&[a-z0-9]{2,10})\\\;>", "$1;", $text);
echo($text);
?>
Gruß
csx
preg_replace: Alle "nicht-Buchstaben" ersetzen.
Verfasst: 15.09.2005, 10:37
von Pretender
hmmmm, ... nojo.....
ich glaube ich habe das falsch ausgedrückt.
Also:
- Der Text steht in einer CSV!
- Der text steht hintereinander weg und da ist nix mit einem Zeilenende.
- Das Zeilenende ist lediglich mit einem
; gekennzeichent. Also der Text steht in einem ganzen Block und dieser Text-Block besteht aus z.B. aus 6 Sätzen die jeweils mit einem
; beendet sind.
Das Problem
war das durch UTF8 der Text auch Sonderzeichen hat und diese werden, wie das Satzende auch mit einem
; beendet
Beispiel-Text
Code: Alles auswählen
hier stehen verschiede Texte & Textbloecke; Diese Saetze in den Textbloecken werden jedesmal mit diesem (;) Zeichen beendet; Da das Sonderzeichen & aber ebenfalls mit diesem Zeichen endet, wird diese Zeichen ebenfalls mit einem <br> ersetzt;
Wir haben jetzt jedoch eine Lösungen gefunden.
Es wird zuerst der UTF8 decodiert und dann erst das ; mit dem <br> ersetzt. also so sieht das dann aus
Code: Alles auswählen
$text="$d";
$text1=html_entity_decode(utf8_decode($text));
$text2=ereg_replace("; ","<br>",$text1);
Aber ich glaube man hätte es auch so lösen können. Allerdings erscheint mir das doch recht umständlich, da man ja alle Sonderzeichen berücksichtigen müsste.
Code: Alles auswählen
$text="$d";
$text1=ereg_replace("&","& ",$text)
$text2=ereg_replace("; ","<br>",$text1);
print $text2;
Vielen Dank an alle Helfer!