Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

preg_replace: Alle "nicht-Buchstaben" ersetzen.

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
mcchaos
PostRank 9
PostRank 9
Beiträge: 1414
Registriert: 27.07.2004, 19:18

Beitrag von mcchaos » 28.07.2005, 14:53

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

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


LinkPop
PostRank 9
PostRank 9
Beiträge: 1677
Registriert: 02.05.2004, 13:52

Beitrag von LinkPop » 28.07.2005, 15:40

$sWord = preg_replace("/[^A-Z a-z]/", "*", $sWord);
oder
$sWord = preg_replace("/[^a-z]/i", "*", $sWord);
[url=httpss://www.rankseek.com/][img]httpss://www.rankseek.com/img/rankseek-xs-2.png[/img][/url]
  • Täglicher Ranking-Check Deiner Top-Keywords mit Traffic-Index für Mobile und Desktop, Serp-View, Reporting, Ranking-Charts, Konkurrenzanalyse, Ranking-Verteilung, Keyword-Suggest und mehr für nur 11,90 € / Monat. Jetzt alle rankseek-Tools 30 Tage kostenlos testen » [url=httpss://www.rankseek.com/features.php]Features[/url]

Anonymous

Beitrag von Anonymous » 28.07.2005, 15:43

$sWord = preg_replace("/[^A-Za-z]/", "*", $sWord);

mcchaos
PostRank 9
PostRank 9
Beiträge: 1414
Registriert: 27.07.2004, 19:18

Beitrag von mcchaos » 28.07.2005, 15:49

Danke!!

Ich dachte immer, ^ gibt den Zeilenanfang an...

robo
PostRank 8
PostRank 8
Beiträge: 837
Registriert: 23.12.2003, 19:41
Wohnort: Schwangau

Beitrag von robo » 28.07.2005, 15:54

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 :)

OnkelHotte
PostRank 6
PostRank 6
Beiträge: 439
Registriert: 29.06.2005, 07:05

Beitrag von OnkelHotte » 28.07.2005, 16:39

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*

bsnoop
PostRank 5
PostRank 5
Beiträge: 205
Registriert: 01.09.2004, 22:12

Beitrag von bsnoop » 28.07.2005, 18:08

Durch was denn ersetzen?

Anonymous

Beitrag von Anonymous » 28.07.2005, 18:37

/\[link=([^\]]*)\]/

/\[extern=([^\]]*)\]([^\[]*)\[\/extern\]/

soetwas in der Art?

OnkelHotte
PostRank 6
PostRank 6
Beiträge: 439
Registriert: 29.06.2005, 07:05

Beitrag von OnkelHotte » 29.07.2005, 07:25

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:

pi-de
PostRank 6
PostRank 6
Beiträge: 406
Registriert: 22.03.2003, 11:06

Beitrag von pi-de » 29.07.2005, 08:08

Versuch mal:

$search = "/\[link=([^\]]*)\]/U";
$replace = "<a href=\"https://".str_replace('http://','','\\1')."\">".strtolower(\\1)."</a>";
preg_replace($search, $replace, $string);

Anonymous

Beitrag von Anonymous » 29.07.2005, 09:49

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...

Pretender
PostRank 9
PostRank 9
Beiträge: 1081
Registriert: 22.04.2004, 14:44
Wohnort: Naumburg

Beitrag von Pretender » 14.09.2005, 16:46

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.

Anonymous

Beitrag von Anonymous » 14.09.2005, 17:29

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:

csx
PostRank 5
PostRank 5
Beiträge: 305
Registriert: 09.02.2005, 18:19

Beitrag von csx » 15.09.2005, 00:43

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

Pretender
PostRank 9
PostRank 9
Beiträge: 1081
Registriert: 22.04.2004, 14:44
Wohnort: Naumburg

Beitrag von Pretender » 15.09.2005, 10:37

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!

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag