php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 09.10.2006, 21:50  
Benutzer
 
Registriert seit: 18.11.2004
Beiträge: 56
Gumfuzi
Standard preg_replace: reg. expr.

Hallo Leute,

Ich habe nun mehrere Stunden bei dem Befehl verbracht (inkl. ein paar Seiten im Netz zu dem Thema), aber ich komme einfach nicht zur Lösung:

Was soll erreicht werden?
Ich habe in einem String einen HTML-Code einer Seite und möchte nun alle Links, ersetzen:
alle solche Links sollen so ersetzt werden, dass aus:
Code:
ARTIKEL 
folgender Code wird:
Code:
[[ARTIKEL]]
"ARTIKEL" ist ein Beispiel und kann auch anders lauten, ist also variabel, der Rest inkl. dem Anführungszeichen am Ende ist immer gleich.

zuerst dachte ich, dass ich den vorderen Teil duch "[[" und den hinteren Teil durch "]]" ersetze, aber ich habe ja auch noch andere (normale, mit irgendwelchen Adressen) Links im String und die sollen nicht umgewandelt werden.

Dann habe ich von den Regular Expressions gelesen und unzählige Codes probiert. Hier der letzte davon:
Code:
<?php
$text = '<a href="http://www.test.de/glossar.php?titre=SAMURIZE"';
$text = str_replace('<a href="http://www.test.de/glossar.php?titre=', 'asdfjklö', $text);
echo $text . "
";
$text = preg_replace('(asdfjklö(/.*/)("))', 'abc\\1]', $text);
echo $text;
?>
Erklärung:
um nur die gewünschten Links später zu bearbeiten, habe ich diese vorher mit einem eindeutigen Begriff gekennzeichnet ("asdfjklö").

Was ist gesucht?
Also sollen alle Vorkommen mit "asdfjklö" + irgend ein Wort + ">" + irgend ein Wort + "</a>" mit
"[[" + irgend ein Wort + "]]" ersetzt werden.

Es kommt aber immer der Ausgangwert raus - hat da jemand bitte einen Tipp für mich oder zumindest einen vernüftigen Ansatz (muss ja nicht unbedingt gleich die komplette Lösung sein)

Viele Dank für eure Hilfe!
Gumfuzi ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 09.10.2006, 23:16  
Benutzer
 
Registriert seit: 18.05.2008
Beiträge: 41
MrZYX befindet sich auf einem aufstrebenden Ast
MrZYX eine Nachricht über ICQ schicken MrZYX eine Nachricht über AIM schicken MrZYX eine Nachricht über MSN schicken MrZYX eine Nachricht über Yahoo! schicken MrZYX eine Nachricht über Skype™ schicken
Standard

http://www.regenechsen.de/phpwcms/index.php?regex_allg
Lies dir das erstmal durch, damit hab ich (halbwegs) reg. expr. gelernt
__________________
Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher. - Albert Einstein
MrZYX ist offline  
Alt 10.10.2006, 01:46  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.241
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

deine angabe ist nich präzise genug.
welches ARTIKEL soll denn ins BB eingehen? wenn der parameterwert, dann ist dies dein code:


Code:
$string = 'ARTIKEL';
echo preg_replace ('#.*?#' , '[[$1]]' , $string);
ps: lohnt sich wirklich, sich da einzuarbeiten. dann braucht man nämlich nur noch 2 minuten für die aufgabe viel spasz
nikosch ist offline  
Alt 10.10.2006, 16:01  
Benutzer
 
Registriert seit: 18.11.2004
Beiträge: 56
Gumfuzi
Standard

Danke, mit dem Code klappt es super!

Nichtsdestotrotz werde ich mir in den nächsten Tagen den Artikel zur Gemüte führen, um zumindest die "einfacheren" Dinge zu erlernen.

Danke!!!
Gumfuzi ist offline  
Alt 10.10.2006, 17:29  
Benutzer
 
Registriert seit: 18.11.2004
Beiträge: 56
Gumfuzi
Standard

habe da noch eine Frage:
Ich möchte nun den Begriff in den Klammern ("[[" und "]]") so haben, daß der erste Buchstabe immer groß ist und die restlichen immer klein sind.
Leider kann ich innerhalb des preg_replace anscheinend keinen anderen Befehl einbauen:
PHP-Code:
preg_replace ('#\[\[(.*?)%20(.*?)\]\]#' ' [[' strtolower($"_" . $2) . ']] ' $string); 
(habe hier auch noch alle "%20" in den Klammern durch ein "_" ersetzen lassen *stolzaufmichbin*)

Wie aber kann ich das mit der Groß-Kleinschreibweise machen?
Muss ich da das erste Zeichen extra "isolieren" und dann den Rest zwischen den Klammern extra? Soweit ich gelesen habe, kann man zwar noch Grpß- oder Kleinschreibung suchen, aber diese nicht ändern, oder?

Habt ihr da einen Tipp für mich?
Gumfuzi ist offline  
Alt 10.10.2006, 20:50  
Benutzer
 
Registriert seit: 18.05.2008
Beiträge: 41
MrZYX befindet sich auf einem aufstrebenden Ast
MrZYX eine Nachricht über ICQ schicken MrZYX eine Nachricht über AIM schicken MrZYX eine Nachricht über MSN schicken MrZYX eine Nachricht über Yahoo! schicken MrZYX eine Nachricht über Skype™ schicken
Standard

PHP-Code:
<?php
 preg_replace
("~\[\[(.*?)%20(.*?)\]\]~e""'[['.substr('\\1', 0, 1).strtolower(substr('\\1', 1)).'_'.substr('\\2', 0, 1).strtolower(substr('\\2', 1)).']]'"$string);
?>
Zitat:
Mit dem Modifikator e wird der Parameter Ersatz nach den entsprechenden Ersetzungen der Referenzen von preg_replace() wie PHP-Code behandelt. Tipp: Stellen Sie sicher, dass Ersatz gültigen PHP-Code erzeugt, weil sich PHP sonst über einen Syntaxfehler (parse error) in der Zeile beschwert, die den Aufruf von preg_replace() enthält.
http://de.php.net/manual/de/function.preg-replace.php
__________________
Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher. - Albert Einstein
MrZYX ist offline  
Alt 10.10.2006, 21:51  
CIX88
Gast
 
Beiträge: n/a
Standard

Wie wäre es einfach mit ucfirst ( strtolower('wort') ) ...
 
Alt 10.10.2006, 22:33  
Benutzer
 
Registriert seit: 18.11.2004
Beiträge: 56
Gumfuzi
Standard

@Mr.ZYX:
Vielen Dank für Deine rasche Hilfe, habe Deinen Tipp gleich bei anderen Fällen anwenden können!
Gumfuzi ist offline  
Alt 11.10.2006, 15:08  
Benutzer
 
Registriert seit: 18.05.2008
Beiträge: 41
MrZYX befindet sich auf einem aufstrebenden Ast
MrZYX eine Nachricht über ICQ schicken MrZYX eine Nachricht über AIM schicken MrZYX eine Nachricht über MSN schicken MrZYX eine Nachricht über Yahoo! schicken MrZYX eine Nachricht über Skype™ schicken
Standard

@CIX88 stimmt das ist noch besser
PHP-Code:
<?php
 preg_replace
("~\[\[(.*?)%20(.*?)\]\]~e""'[['.ucfirst(strtolower('\\1')).'_'.ucfirst(strtolower('\\2')).']]'"$string);
?>
__________________
Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher. - Albert Einstein
MrZYX ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
reg expr problem noskule PHP Tipps 2005-2 11 07.09.2005 22:44

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
asdf jklö text, $regs[1] php rest, php preg_replace steuerkommandos, $text = str_replace(, preg_replace rest, str_replace reg

Alle Zeitangaben in WEZ +1. Es ist jetzt 07:54 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.