php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 25.03.2006, 01:20  
Neuer Benutzer
 
Registriert seit: 25.03.2006
Beiträge: 8
BLiNK
Standard Problem mit regex

Hallo,

ich habe ein Problem mit folgender regex, bzw. mit dem Aufruf der Funktion, die darin eingebaut ist:

Code:
$pattern = '/(\[\[)(.+)(\]\])/e';
$new = preg_replace($pattern, "isKeyword($2)", $old);
Die Funktion isKeyword macht noch nichts, kann aber dennoch nicht aufgerufen werden, wenn Leerzeichen mit ins Spiel kommen. Das Pattern soll ja so aussehen: [[Wort]] (so funktioniert es auch)
Sieht es aber so aus: [[ein Wort]] bekomme ich folgende Fehlermeldung:

Code:
Parse error: parse error, unexpected T_STRING in ... : regexp code on line 1

Fatal error: Failed evaluating code: isKeyword(ein Wort) in ...
Was mache ich falsch?
BLiNK ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 25.03.2006, 11:31  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

isKeyword(ein Wort);

fällt dir nichts auf?
PS: Willkommen im Forum
Zergling-new ist offline  
Alt 25.03.2006, 11:36  
Neuer Benutzer
 
Registriert seit: 25.03.2006
Beiträge: 8
BLiNK
Standard

Danke für die Antwort schonmal, auch wenn sie mir nicht viel weiterhilft

Ich hab schon versucht die Signatur der Funktion zu zwei Parametern zu verändern, aber auch das hat nicht funktioniert. Oder wird das Leerzeichen auch einzeln übergeben und ich brauche drei? Ich bin mir eben nicht sicher, wie übergeben wird. Ein Strin "kann nunmal auch Leerzeichen enthalten".

Jedenfalls würde das übergeben mehrerer Parameter mein Problem auch nicht lösen, da ich ja nicht weiß, wie viele Worte im Pattern vorkommen. Kann ich dann nicht einfach eine Liste, ein Array oder etwas in der Richtung übergeben?
BLiNK ist offline  
Alt 25.03.2006, 12:42  
Erfahrener Benutzer
 
Registriert seit: 25.04.2005
Beiträge: 1.356
HStev zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Was Zergling sagen möchte:

Guck dir mal http://de2.php.net/manual/de/functio...e-callback.php an

bzw. erkäre mal bitte genauer was du möchtes?

wenn du leerzeichen mit matchen möchtes dann bau einfach ein \s? mit ein

http://www.regenechsen.de/phpwcms/in...gex_allg_liste
__________________
Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.
HStev ist offline  
Alt 25.03.2006, 12:58  
Neuer Benutzer
 
Registriert seit: 25.03.2006
Beiträge: 8
BLiNK
Standard

Das matchen funktioniert ja. Der "." umfasst ja auch die Leerzeichen.

Ich möchte einfach einen Aufruf von isKeyword mit dem gesamten String der in den Klammern steht. Solange keine Leerzeichen im Spiel sind, funktioniert das ja auch, nur sobald ein Leerzeichen zwischen Buchstaben auftaucht wie bei [[ein Wort]] bekomme ich oben geschilderte Fehlermeldung.

Es liegt also meiner Meinung nach nicht am Matching, sondern am Funktionsaufruf. Und was Zergling geschrieben hat, schien mehr eher auf die Funktionssignatur abzuzielen.

preg_replace_callback() werd ich mal austesten, aber ich glaube nicht, dass das mein Problem umgehen kann.
BLiNK ist offline  
Alt 25.03.2006, 13:02  
Erfahrener Benutzer
 
Registriert seit: 25.04.2005
Beiträge: 1.356
HStev zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Naja isKeyword($2) sieht nach einer Funktion aus ... die Frage ist soll diese auch ausgeführt werden oder einfach nur in den Text geschrieben werden?

Gib mal mehr Info's. Zb. Textbeispiele wo dieser Fehler auftaucht nicht nur das Pattern
__________________
Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.
HStev ist offline  
Alt 25.03.2006, 13:05  
Gast
 
Beiträge: n/a
Standard

Es geht daraum, wie eine Zeichenkette an eine Funktion übergeben wird.

print(Wort) -> Notice: Use of undefined constant Wort - assumed 'Wort'
print(ein Wort) -> Parse error: syntax error, unexpected T_STRING
print('Wort') -> Kein Fehler
print('ein Wort') -> kein Fehler

Und genau das passiert Dir auch bei preg_match mit der Option e. Das muss gültiger Code sein, der da beim Ersetzen rauskommt.

, "isKeyword('$2')",
 
Alt 25.03.2006, 13:07  
Neuer Benutzer
 
Registriert seit: 25.03.2006
Beiträge: 8
BLiNK
Standard

Jep, klar. isKeyword ist meine Funktion und soll auch aufgerufen werden. Wird sie auch.

Ein Beispiel wäre etwa
Code:
 
[[Dieser Link]] sollte ersetzt werden.
Mit meiner Methode funktionierte das nicht. Es sollte isKeyword() mit dem String "Dieser Link" aufgerufen werden.

Mit preg_replace_callback() ließ es sich aber tatsächlich beheben. Ich verstehe zwar nicht wieso, aber immerhin funktioniert es.

Danke soweit schonmal.
BLiNK ist offline  
Alt 25.03.2006, 13:08  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Ich wollte damit sagen, dass du den Wert in Anführungszeichen schreiben solltest.
Also statt
PHP-Code:
<?php
isKeyword
(ein Wort);
// muss es ja wohl
isKeyword('ein Wort');
?>
heißen!

Beispiel:
PHP-Code:
<?php
function test($string) {
    if (
$string == 'blinder Mann mit Krückstock') {
        return 
'Pferd';
    } else {
        return 
'Olli Dietrich';
    }
}

$pattern "/(Da steht ein )(.*)( auf dem Flur.)/e";
$text    "Da steht ein blinder Mann mit Krückstock auf dem Flur.";

print 
preg_replace($pattern"'$1'.test('$2').'$3'"$text);
?>
Zergling-new ist offline  
Alt 25.03.2006, 13:10  
Erfahrener Benutzer
 
Registriert seit: 25.04.2005
Beiträge: 1.356
HStev zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

hmm ich dachte bisher immer das dafür die callback funktion ist ...
__________________
Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.
HStev 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
Array sortieren mit regex Lupi PHP Tipps 2008 3 21.07.2008 15:17
[Erledigt] Galerie Problem... coraplanet PHP Tipps 2008 4 06.06.2008 13:42
Problem mit dem Escapen in einem reg. Ausdruck ??? Frank Burian HTML, Usability und Barrierefreiheit 4 07.07.2006 00:02
problem!!! PHP Tipps 2006 6 08.02.2006 11:06
[Erledigt] wieder ein Problem bei phpmailer und smtp PHP Tipps 2006 24 07.02.2006 01:07
Problem mit zu langen String -> regex PHP Tipps 2006 1 25.01.2006 17:38
[Erledigt] Problem mit einem Regex PHP-Fortgeschrittene 4 23.01.2006 09:34
[Erledigt] Regex Problem. PHP Tipps 2007 14 07.11.2005 15:24
komplexeres Regex Problem Schaelle PHP Tipps 2005-2 14 29.08.2005 20:21
Problem mit RegEx freq.9 PHP Tipps 2005-2 3 29.08.2005 13:32
Regex Problem PHP Tipps 2005-2 8 14.08.2005 18:40
Problem mit regex PHP Tipps 2004 1 09.09.2004 10:00
[Erledigt] regex problem PHP Tipps 2004 9 04.09.2004 16:46
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34
[Erledigt] Problem mit eine REGEX! PHP-Fortgeschrittene 7 04.06.2004 17:04

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
regex richtung php

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:23 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.