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

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.

:naund:

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 &#228;
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&#40;"/^&#40;.*&#41;;$/m","\\1<br>",$text&#41;;

print $text2;
?>
entfernt nur ein ; am zeilenende.... :wink:

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&#40;"<&#40;\&&#91;#a-z0-9&#93;&#123;2,10&#125;&#41;;>i", "$1\\;", $text&#41;;
$text = preg_replace&#40;"<&#40;&#91;^\\\&#93;&#41;;>", "$1 <br> ", $text&#41;;
$text = preg_replace&#40;"<&#40;\&&#91;a-z0-9&#93;&#123;2,10&#125;&#41;\\\;>", "$1;", $text&#41;;
echo&#40;$text&#41;;
?>

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 &#40;;&#41; 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&#40;utf8_decode&#40;$text&#41;&#41;;
  $text2=ereg_replace&#40;"; ","<br>",$text1&#41;;
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&#40;"&","& ",$text&#41;
  $text2=ereg_replace&#40;"; ","<br>",$text1&#41;;
  print $text2; 
Vielen Dank an alle Helfer!