[GastForen Programmierung/Entwicklung PHP und MySQL Preg_replace()

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Preg_replace()

Pozor
Beiträge gesamt: 892

10. Sep 2004, 17:47
Beitrag # 1 von 7
Bewertung:
(2347 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

ich habe folgendes problemchen (schon gelöst), doch würde ich mich
euer Senf dazu interessieren

[CODE: PHP]
<?php
$pattern[] = '/#**test1**#/'; //z.B. '#**test1**#' für str_replace()
$pattern[] = '/#**test2**#/';
$pattern[] = '/#**test3**#/';

$replacement[] = '1';
$replacement[] = '2';
$replacement[] = '3';


$haystack[] = 'bli#**test1**#blö'.$nl;
$haystack[] = 'bli #**test3**# blö';
$haystack[] = '#**test2**#';
$haystack[] = 'bli #**test1**#blö';

echo '<pre>';
$result = preg_replace($pattern, $replacement, $haystack);
print_r($result);
echo '</pre>';
?>

Dies geht nicht,es reklamiert folgendes:
Warning: Compilation failed: nothing to repeat at offset 2 in /home/www/web493/html/test/parser/master/languageprocessor/test_preg_replace.php on line 17

es wird nicht ersetzt.

Ich nehme an ich habe ein fiese pattern in meinem heuhaufen,
ich sollte wahrscheinlich keine zeichen wie # als start/ende des zu
ersetzenden patterns nehmen, nur es seiht so schön auzs ;)

Ich habe es nun mal so gelöst, dass ich die Pattern die anfangs ende zeichen / weggelassen habe, und mit str_replace gearbeitet habe. so
funktioniert es tiptop.

Was meint ihr dazu?

gruss Pozor

http://www.boelsterli.biz
X

Preg_replace()

pat87
Beiträge gesamt: 581

10. Sep 2004, 17:54
Beitrag # 2 von 7
Beitrag ID: #108069
Bewertung:
(2347 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
ich würde es mal mit zahlen in den eckigen klammern versuchen...

mfg p@
---
so einfach wie möglich, aber nicht einfacher! (albert einstein)


als Antwort auf: [#108068]

Preg_replace()

pat87
Beiträge gesamt: 581

10. Sep 2004, 17:55
Beitrag # 3 von 7
Beitrag ID: #108072
Bewertung:
(2347 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
http://www.php.net/...ion.preg-replace.php

mfg p@
---
so einfach wie möglich, aber nicht einfacher! (albert einstein)


als Antwort auf: [#108068]

Preg_replace()

Miro Dietiker
Beiträge gesamt: 699

10. Sep 2004, 23:15
Beitrag # 4 von 7
Beitrag ID: #108103
Bewertung:
(2347 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Dein Problem liegt wohl hier

For example, if you want to match a "*" character, you write "\*" in the pattern. This applies whether or not the following character would otherwise be interpreted as a meta-character, so it is always safe to precede a non-alphanumeric with "" to specify that it stands for itself. In particular, if you want to match a backslash, you write "\".

Stichwort: Pattern Syntax @ php.net oder HelpFile

* zu matchen macht man also im Pattern mittels \*

Liege ich da richtig beim Problem? :-)

GrEeZ: Miro Dietiker


als Antwort auf: [#108068]

Preg_replace()

Pozor
Beiträge gesamt: 892

13. Sep 2004, 11:03
Beitrag # 5 von 7
Beitrag ID: #108337
Bewertung:
(2347 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hallo,

@pat87
schöne idee nur nicht anwenderfreundlich, bis jetzt steht als
zu ersetzendes Pattern immer der englische text, so ist es einfach im
definitionfile es in eine andere sprache zu übersetzen.

@miro
???
* ist die maske für kein oder n zeichen
die lösung für solche pattern ist mehr in dieser richtung zu suchen:
$preg_pattern = "/" . preg_quote($wort) . "/";

so erhält mann das richtige pattern, wenn es sonderzeich (für regex)
enthält.

für mein problem ist str_replace eh besser, da nur ersetzt wird und nicht komplexe suchmuster angewendet werden.

Gruss Pozor

http://www.boelsterli.biz


als Antwort auf: [#108068]

Preg_replace()

Miro Dietiker
Beiträge gesamt: 699

13. Sep 2004, 12:16
Beitrag # 6 von 7
Beitrag ID: #108354
Bewertung:
(2347 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Genau, das mit str_replace fasse ich auch als sinnvoller auf..
Man muss einfach im Hinterkopf behalten, dass manche trivialen
Aufgaben welche man mit str_replace und Schleifen 'schnell'
implementiert durch preg_replace noch schneller gemacht werden,
weil die Suchalgorithmus/muster auf einer aneren Ebene 'kompiliert'
werden! Manchmal lohnt sich ein Performance-Test

Ja, wenn deine Muster so aussehen, dass biste mit dem preg_quote
wohl am richtigen ort .-)

Da deine Codefragmente nur Beispiele waren, ist manchmal schwierig
die korrekte/beste Standardlösung zu finden...
Jeder hat seine komplett eigene Philosophie/Strategie für
Ersetzungensprozesse und Übersetzungsprozesse und da denke ich eh
etwas anders - drum ist das eindenken ins 'wieso' und der eigentliche
Zweck der Frage/Aufgabe nicht so einfach verständlich...
... entsprechend die Lösungen auch nicht treffgenau ;)

GrEeZ: Miro Dietiker


als Antwort auf: [#108068]

Preg_replace()

Pozor
Beiträge gesamt: 892

15. Sep 2004, 11:29
Beitrag # 7 von 7
Beitrag ID: #108772
Bewertung:
(2347 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Sali Miro,

da ich deises Skript nur sehr wenig laufenlassen werde,
spielt die Performance nicht die bedeutenste Rolle.
Es ist gedacht um statische Texte je nach Sprache zu compilieren
und in ein anderes Verzeichniss zu kopieren.

Ich hatte mir auch schon gedanken gemacht, ob ich es so programmieren sollte, dass die Templatefiles in die Verarbeitungsdatei zu integrieren,
zwecks weniger HD-Zugriffe.
Ev. ist dies ein Performancevorteil gegenüber der version, dass sie einfach included werden.

gruss Pozor
http://www.boelsterli.biz


als Antwort auf: [#108068]
X