php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 16-06-2010, 21:18
icecoldkilla
 Registrierter Benutzer
Links : Onlinestatus : icecoldkilla ist offline
Registriert seit: Jun 2010
Beiträge: 5
icecoldkilla befindet sich auf einem aufstrebenden Ast
Standard kann mir jemand bitte preg_replace anhand des praktischen Beispiels erklären?

Hallo,

Ich würde gerne etwas mehr über preg_replace() methoden erfahren.

folgendes Problem :

ich habe :

$x = "a";
$y = "b";

$text = "Buchstabe nummer eins ist [[x]] und buchstabe nummer 2 ist [[y]]";

jetzt will ich das [[x]] durch $x und [[y]] durch $y ersetzt wird.

das löse ich folgendermaßen:

PHP-Code:
$values= array('[[x]]' => $x'[[y]]' => $y);
    foreach (
$values as $i => $j) {
    
$text str_replace($i$j$text);

jetzt will ich aber, wenn ich jetzt z.B. noch $z = "c"; einfüge und in $text noch [[c]] vorkommt, das es automatisch ersetzt wird ohne das ich mein array erweitern muss.

folglich müsste ich [[*]] durch $* ersetzen, wobei * sowohl bei [[]] als auch bei $ der gleiche wert sein muss.

ich weiss, das es mit preg_replace gelöst werden kann, jedoch verstehe ich die komplizierte erklärung aus der PHP Doku leider nicht.

Kann mir jemand bitte helfen?

danke im Voraus, und tolles forum btw
Mit Zitat antworten
  #2 (permalink)  
Alt 16-06-2010, 21:24
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo und willkommen im Forum,

erklär mir mal bitte erstmal, warum dir die vielen Beispiele im Handbuch nicht reichen.

Was die komplizierten Erklärungen angeht: PCRE ist ein komplexes Thema und da mussten wir alle mal durch. Aber sei versichert, dass sich die 2 Tage lohnen, in denen du damit rumprobieren solltest.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!

Geändert von AmicaNoctis (16-06-2010 um 21:28 Uhr)
Mit Zitat antworten
  #3 (permalink)  
Alt 16-06-2010, 21:28
icecoldkilla
 Registrierter Benutzer
Links : Onlinestatus : icecoldkilla ist offline
Registriert seit: Jun 2010
Beiträge: 5
icecoldkilla befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

Weil nirgendwo nach variablem Inhalt gesucht wird, bzw unbekannter Inhalt der zwischen 2 bestimmten Zeichen / Zeichenketten steht.

dankeschön
Mit Zitat antworten
  #4 (permalink)  
Alt 16-06-2010, 21:32
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

PHP: Square brackets - Manual

Die ersten 7 Absätze solltest du lesen und deine Versuche und Teilerfolge hier dokumentieren. Wenn du dann nicht weiter kommst, sehen wir weiter. Aber ich will jetzt erstmal Eigeninitiative sehen.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #5 (permalink)  
Alt 16-06-2010, 23:01
icecoldkilla
 Registrierter Benutzer
Links : Onlinestatus : icecoldkilla ist offline
Registriert seit: Jun 2010
Beiträge: 5
icecoldkilla befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

Vielen Dank schonmal

na dann werd ich hier nach und nach editieren.

also der Ausdruck nach dem ich suche ist wohl
PHP-Code:
"/[[+([a-zA-Z]{2,})+]]/" 
jetzt muss ich nur noch den variablen Inhalt zwischen [[ und ]] herausfiltern.

Leider habe ich hier keine Ahnung wie ich das tun soll.

Ausserdem habe ich auch keine Ahnung ob der Ausdruck richtig ist, da mir der zweite Teil fehlt um es herauszufinden.

EDIT :// zum debuggen hab ich das jetzt erstmal so versucht, aber er ersetzt nicht, ausserdem habe ich einen Fehler oben entdeckt :

PHP-Code:
$x "a";
$y "b";
$z "c";

$text "@x@ @y@ @z@";

$text preg_replace("/^@$([a-zA-Z]{2,})^@$/i""it worked"$text);

echo(
$text); 
edit 2 ://

so klappts :

PHP-Code:
$x "a";
$y "b";
$z "c";

$text "@x@ @y@ @z@";

$text preg_replace("/@(\w+)@/""it worked"$text);

echo(
$text);
// Ausgabe dem entsprechend it worked it worked it worked 
ich muss nur noch rausfinden wie ich dieses (\w+) auslesen kann...

noch ein Edit ://

das ich mit $1 arbeiten muss ist mir nun auch klar, bloß kann ich aus $1 keine variable variable machen ($$1).
hier scheiter ich nun, weiter komm ich nicht.

Geändert von icecoldkilla (16-06-2010 um 23:20 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 16-06-2010, 23:20
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Das $ vorn muss weg, das verankert den Ausdruck am Ende und macht daher am Anfang keinen Sinn.

Die Ersetzung mit @ ist bestimmt eine Krücke, weil du nicht wusstest, dass [ und ] Sonderzeichen sind, welche du maskieren musst: \[ und \].

Edit: Gespeicherte Subpatterns kann man auch mit \\ statt $ abrufen, was ich auch empfehle:

PHP-Code:
echo preg_replace("/f(o+)bar/""schm\\1bar""fooooooobar"); // => schmooooooobar 
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!

Geändert von AmicaNoctis (16-06-2010 um 23:28 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 16-06-2010, 23:25
icecoldkilla
 Registrierter Benutzer
Links : Onlinestatus : icecoldkilla ist offline
Registriert seit: Jun 2010
Beiträge: 5
icecoldkilla befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

Ja das @ war nur eine Krücke, dankeschön

und ich bin jetzt etwas weiter gekommen, kannst du mir vielleicht sagen wo nun mein Fehler ist ?


hatte es schon oben dokumentiert

bzw :

jetzt bin ich bei

PHP-Code:
<?php

$x 
"a";
$y "b";
$z "c";

$text "[x] [y] [z]";

$text preg_replace("/\[(\w+)\]/""works"$text);

echo(
$text);
ich weiss auch das ich mit $1 das (\w+) rausfiltern kann,
jedoch kann ich mit $$1 keine variable variable aus $1 machen die dann beispielsweise auf $x zugreifen würde, sondern es wird $x ausgegeben als Text.
Mit Zitat antworten
  #8 (permalink)  
Alt 16-06-2010, 23:32
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von icecoldkilla Beitrag anzeigen
jedoch kann ich mit $$1 keine variable variable aus $1 machen die dann beispielsweise auf $x zugreifen würde, sondern es wird $x ausgegeben als Text.
Da solltest du mal bei preg_replace_callback nachsehen, obwohl ich das ganze Vorhaben für bedenklich halte. Das was du machen willst sieht nach einer unsauberen Behebung eines Designfehlers aus. Es gibt auch noch einen e-Modifier, der den Ersetzungsausdruck als PHP-Code evaluiert, aber das ist auch dirrrty, wenn du mich fragst.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!

Geändert von AmicaNoctis (16-06-2010 um 23:35 Uhr)
Mit Zitat antworten
  #9 (permalink)  
Alt 16-06-2010, 23:43
icecoldkilla
 Registrierter Benutzer
Links : Onlinestatus : icecoldkilla ist offline
Registriert seit: Jun 2010
Beiträge: 5
icecoldkilla befindet sich auf einem aufstrebenden Ast
Standard

Hi,

Dankeschön

PHP-Code:
$x "a";
$y "b";
$z "c";

$text "[x] [y] [z]";


$text preg_replace("/\[(\w+)\]/e""$$1"$text);

echo(
$text); 
Ausgabe : a b c
Mit Zitat antworten
  #10 (permalink)  
Alt 17-06-2010, 00:18
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

edit:
Hoppala, ich war doch nur zwei Stunden weg. Das nächste Mal mach ich erst einen Reload, bevor ich 'nen Post abschicke ...

Zitat:
Zitat von icecoldkilla Beitrag anzeigen
Hallo,

Ich würde gerne etwas mehr über preg_replace() methoden erfahren.

folgendes Problem :

ich habe :

$x = "a";
$y = "b";

$text = "Buchstabe nummer eins ist [[x]] und buchstabe nummer 2 ist [[y]]";

jetzt will ich das [[x]] durch $x und [[y]] durch $y ersetzt wird.

PHP-Code:
$values= array('[[x]]' => $x'[[y]]' => $y);
    foreach (
$values as $i => $j) {
    
$text str_replace($i$j$text);

jetzt will ich aber, wenn ich jetzt z.B. noch $z = "c"; einfüge und in $text noch [[c]] vorkommt, das es automatisch ersetzt wird ohne das ich mein array erweitern muss.

folglich müsste ich [[*]] durch $* ersetzen, wobei * sowohl bei [[]] als auch bei $ der gleiche wert sein muss.

ich weiss, das es mit preg_replace gelöst werden kann, jedoch verstehe ich die komplizierte erklärung aus der PHP Doku leider nicht.
Ich würde sagen, ohne üble Hacks kann das Problem NICHT mit preg_replace() gelöst werden.

Erstens kennt preg_replace() die Namen von Variablen nicht.
Zweitens scheitert eine allgemeine Mustersuche daran, dass nicht bekannt ist, welche dieser einbuchstabigen Variablen gerade im Script deklariert sind. Man könnte zwar etwas mit preg_replace_callback() oder preg_replace() und dem Modifikator "/e" stricken, aber das würde auf eine Art Hack hinauslaufen.

Die (halbwegs) saubere Variante ist die Erweiterung des Arrays:

PHP-Code:
$replace_me = array (
    
'x' => $x,
    
'y' => $y,
    
'c' => $z,
);

$new_text preg_replace(
    
'/\[\[([a-z])\]\]/e',
    
'isset($replace_me["$1"]) ? $replace_me["$1"] : $0;',
    
$old_text
); 
Halbwegs sauber deshalb, weil "/e" eine versteckte Form von eval() ist. Eine Lösung mit preg_replace_callback() wäre die sicherere Variante.


Okay, dann weiter an der richtigen Stelle:

Zitat:
Zitat von icecoldkilla Beitrag anzeigen
Hi,

Dankeschön

PHP-Code:
$x "a";
$y "b";
$z "c";

$text "[x] [y] [z]";


$text preg_replace("/\[(\w+)\]/e""$$1"$text);

echo(
$text); 
Ausgabe : a b c
Und was glaubst du, passiert, wenn deine Variablen anders definiert wurden? Beispielsweise so:

PHP-Code:
// $x fehlt ganz ...
$y "b";
$z "boeser php-quellcode, der unanstaendige Sachen macht;"
"/e" ist gefährlich, wenn man keine Ahnung hat.
Und variable Variablen sollte man meiden.

Geändert von fireweasel (17-06-2010 um 00:31 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 17-06-2010, 00:29
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von fireweasel Beitrag anzeigen
Das nächste Mal mach ich erst einen Reload, bevor ich 'nen Post abschicke ...
Trotzdem schön zu wissen, dass jemand in allen Punkten mit mir übereinstimmt.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Kann mir jemand erklären was ein Gruppenwechsel ist sanktusm PHP Developer Forum 8 12-02-2006 19:30
bin absoluter neuling! kann mir bitte jemand mal ein script erklären! BITTE BITTE somebody1981 Projekthilfe 3 26-07-2005 01:28
Kann mir bitte jemand folgendes erklären? Chriss PHP Developer Forum 3 04-09-2003 16:32
kann mir jemand folgendes erklären ? Campus PHP Developer Forum 1 27-09-2002 18:23
kann mir das jemand erklären rossy HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 19 21-01-2002 10:33

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:41 Uhr.