Portal > Foren > PHP > PHP-Programmierung > Werte in einen Regexp einsetzen.
Antwort
 
Themen-Optionen
Alt 30.01.2007, 08:48 Nach oben    #1
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 279
Standard Werte in einen Regexp einsetzen.

Ich hab ein kleines Script was mit mit preg_match bestimmte Vorkomnisse in einem Text sucht und ersetzt. Der Text wird mit preg_match geparsed und danach wird das $matches Array in einer Schleife durchlaufen und die gefundenen Stellen mit str_replace ersetzt.

Mein Ausdruck bezieht sich nur auf eine ganze Zeilen das heißt wenn mein ... Wiki ähnlicher Code nicht alleine in einer Zeile steht sondern mitten in einem Satz dann wird er ignoriert weil der regexp nur ganze Zeilen beachtet. So weit funktioniert das.

Problem ist wenn die Vorkommnisse ersetzt werden. Hierbei wird $matches[0] (also die komplett gefundene Stelle) mit str_replace verwendet. Steht der exakt gleiche Wiki Code an einer weiteren Stelle mitten im Satz wird dieser natürlich auch ersetzt.

Nun möchte ich die gefundenen Stellen mit preg_replace ersetzen. Allerdings muss ich dafür die gefundenen Stellen in meinen Ausdruck einbauen damit die exakten Stellen ersetzt werden.

Der in der Klasse festgelegte Regexp sieht ungefähr so aus.
Code:
$this->pattern = '/\<p>{img\|(.*?)\|(left|right)\|(.*?)\}<\/p>/si';
(.*?) <- An diesen Stellen steht beliebiger Inhalt. Wie kann ich nun in diese Stellen Werte einsetzen. Damit beim preg_replace genau diese Stelle ersetzt wird?

Es dürfte wahrscheinlich so gehen

Code:
$this->pattern = '/\<p>{img\|'.$text1.'\|(left|right)\|'.$text1.'\}<\/p>/si';
Aber dann müsste ich ja den in der Klasse vorgegeben Ausdruck auseinander frimmeln. Gibts da nix wie sprintf wo ich in die Stellen im regexp meine eigenen Werte eintragen kann?
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.01.2007, 09:46 Nach oben    #2
Daniel Golowin
 
Registriert seit: 17.11.2005
Ort: Rheinland-Pfalz, Osthofen
Beiträge: 122
Standard

PHP-Code:
$new_pattern preg_replace'/\(\.\*\?\)/'$text$this->pattern ); 
Ein anderer Weg fällt mir dazu grad nicht ein.


Allerdings Frage ich mich, warum du den Umweg durch preg_match gehst? Das währe einfacher mit preg_replace_callback zu lösen und auch performanter.
dago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.01.2007, 09:51 Nach oben    #3
Johannes Schlichenmaier
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 397
Standard

Bin ich dumm?

Was spricht gegen ein einfaches preg_replace mit dem \m-Modifier?

á la
PHP-Code:
$new_text preg_replace("/^\[img\](.*)\[\/img\]$/iU""<img>$1</img>"$text); 
Gruß,
Jojo
__________________
In the beginning was the word
and the word was content-type: plain/text

heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int
Jojo ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.01.2007, 12:23 Nach oben    #4
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 279
Standard

Danke für eure Hilfe. Das mit dem Callback schau ich mir mal an und ob ein einfaches preg_replace das machen kann weiß ich grade nicht da jede Übereinstimmung einen DB Query ausführt.
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.01.2007, 15:22 Nach oben    #5
Daniel Golowin
 
Registriert seit: 17.11.2005
Ort: Rheinland-Pfalz, Osthofen
Beiträge: 122
Standard

Einfach mit preg_replace arbeiten ließe es sich auch. Dazu müsstest du den e-Modifier anhängen.
PHP-Code:
$result preg_replace'/ ... /e''function_name( $1 )'$string ); 
Zitat:
Was spricht gegen ein einfaches preg_replace mit dem \m-Modifier?
@Jojo: Ich versteh nicht ganz, was du damit meinst. Könntest du das evtl. für mich erklären?
dago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.01.2007, 17:44 Nach oben    #6
Johannes Schlichenmaier
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 397
Standard

Er will doch praktisch Zeile für Zeile Sachen ersetzen.
Das mit der DB-Query wusste ich nicht. Steht das oben irgendwo?
__________________
In the beginning was the word
and the word was content-type: plain/text

heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int
Jojo ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.02.2007, 07:27 Nach oben    #7
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
Standard

Eine Alternative wäre vielleicht auch mittels des Parameters "Limit" von preg_replace() auf "1" zu arbeiten. Dann ersetzt er nur das erste Vorkommnis in der Zeichenkette und nicht alle. Aber abgesehen davon: Warum machst du dir das so kompliziert mit dem 2. Query? Nutze einfach preg_quote(), um das Suchergebnis "0" (Also den kompletten String) zu parsen und nimm den als Suchmuster. Dann brauchst du keinen Query zusammenstückeln.
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


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

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 aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Youtube Videos gewerblich einsetzen? bob Interessante Diskussionsthemen 7 18.10.2006 13:07
StrinkTokenizer oder doch RegExp? Ben Allgemeine Java-Programmierung 7 15.03.2006 13:59
regexp Datums-Vervollständigung ex³ PHP-Programmierung 10 12.02.2006 16:16
[MySQL] REGEXP Problem Jay Datenbanken 3 27.12.2005 13:52
Werte Übergabe von Klasse zu Klasse williplumps Allgemeine Java-Programmierung 3 06.08.2005 09:41


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:52 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44