zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden preg_replace nochmal

Antwort
 
LinkBack Themen-Optionen Ansicht
  #11 (permalink)  
Alt 02.12.2007, 15:03
Benutzerbild von paracelsus
be simple
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 16.07.2007
Ort: Kapfenberg - Austria, einige meinen am "Anus Mundi"
Beiträge: 4.788
paracelsus ist einfach richtig nettparacelsus ist einfach richtig nettparacelsus ist einfach richtig nettparacelsus ist einfach richtig nett
Standard

Zitat:
Zitat von code_junkie Beitrag anzeigen
Blauer Text soll bleiben?
[/php]Gruß
Einwandfrei! Herzlichen Dank!
Mit Zitat antworten
Sponsored Links
  #12 (permalink)  
Alt 02.12.2007, 18:48
lässt grüßen
XHTMLforum-Mitglied
 
Registriert seit: 08.10.2007
Ort: Berlin
Beiträge: 189
code_junkie wird schon bald berühmt werden
Standard

Kein Problem, gern g'schehn.
Und, nochmal zur Bewertung: ja, es ist zwar keine Regexp-Lösung, aber so geht's ja auch.. und langsamer ist es so bestimmt auch nicht.
Dafür entfällt die unüberschaubare RegExp, denn die "Trenner" hier sind ja doch recht komplex.. und da sie identisch sind, dachte ich erst mal ans gute strpos/substr.

Gruß
Mit Zitat antworten
Sponsored Links
  #13 (permalink)  
Alt 02.12.2007, 20:25
Benutzerbild von paracelsus
be simple
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 16.07.2007
Ort: Kapfenberg - Austria, einige meinen am "Anus Mundi"
Beiträge: 4.788
paracelsus ist einfach richtig nettparacelsus ist einfach richtig nettparacelsus ist einfach richtig nettparacelsus ist einfach richtig nett
Standard

Zitat:
Zitat von code_junkie Beitrag anzeigen
Kein Problem, gern g'schehn.
Und, nochmal zur Bewertung: ja, es ist zwar keine Regexp-Lösung, aber so geht's ja auch.. und langsamer ist es so bestimmt auch nicht.
Dafür entfällt die unüberschaubare RegExp, denn die "Trenner" hier sind ja doch recht komplex.. und da sie identisch sind, dachte ich erst mal ans gute strpos/substr.

Gruß
Ich hatte mich auf Regex festgeschweisst, die -Deine - "einfachere" Methode, kam mir so gar net in den Sinn. Da sie funkt (natürlich), und überschaubarer ist (leichter verständlich für mich) ist sie mir sogar lieber.
Regex gehört aber dazu, sobald ich wieder Herr meiner Zeit bin, muss ich mir was einfallen lassen um das Zeug zu durchschauen.
Mit Zitat antworten
  #14 (permalink)  
Alt 20.01.2008, 15:36
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 06.04.2005
Ort: Kuchen
Beiträge: 119
Dani@okraina befindet sich auf einem aufstrebenden Ast
Standard

Hi
möchte nicht extra eine Thema eröffnen, deshalb schreib ich einfach mal hier rein Habe folgendes Problem.

Ich hab eine Datenbank Klasse in der ich die Tabellennamen in einem array hab. Wenn ich einen Query senden will sag ich z.b SELECT arg1,arg2 FROM %table:tab2%.... Jetzt möchte ich per preg_replace das %table:tab2% durch den richtigen Tabellennamen (array('tab1' => 'news')) ersetzten. Leider kenn ich mich mit Regex nicht aus Kann mir jemand den Regex dafür machen?

Danke

EDIT:

Hab mal ein kleines Beispiel gemacht mit dem regex den ich mir zusammengereimt hab, der aber nicht funktioniert.

PHP-Code:
<?php
$tablename 
= array( 'news' => 'news_table''user' => 'user_table' );


function 
getTablename$name )
{
    global 
$tablename;
    if( !
in_array$name$tablename) )
    {
        die(
'Tabelle '.$name.' nicht gefunden.');
    }
    return 
$tablename[$name];
}

$text 'SELECT authorid FROM %table:news% WHERE newsid=1';

$plattern '/^\%table:(.*)\%';
$text preg_replace$platterngetTablename('$1'), $text );
echo 
$text;

?>
Wenn ich das Probiere gibt er folgendes aus 'Tabelle $1 nicht gefunden.'

Geändert von Dani@okraina (20.01.2008 um 15:47 Uhr)
Mit Zitat antworten
  #15 (permalink)  
Alt 20.01.2008, 16:54
Benutzerbild von fox
fox fox ist offline
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 11.09.2006
Beiträge: 1.010
fox sorgt für eine eindrucksvolle Atmosphärefox sorgt für eine eindrucksvolle Atmosphäre
Standard

Du brauchst den Modifier e:

PHP-Code:
$plattern '/^\%table:(.*)\%/e';
$text preg_replace$plattern'getTablename("$1")'$text );
echo 
$text
Wobei du da noch aufpassen musst, wenn dort sowas wie table:"); steht... da müsstest du noch addslashes o.ä. anwenden... Aber wie das dann aussehen muss... da fragst du mich zu viel


lg
__________________
:)
Mit Zitat antworten
  #16 (permalink)  
Alt 20.01.2008, 17:26
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 06.04.2005
Ort: Kuchen
Beiträge: 119
Dani@okraina befindet sich auf einem aufstrebenden Ast
Standard

Leider funktioniert das nicht er gibt

SELECT authorid FROM %table:news% WHERE newsid=1

aus ohne ersetzen
Mit Zitat antworten
  #17 (permalink)  
Alt 20.01.2008, 17:32
Benutzerbild von Gumbo
XHTMLforum-Kenner
 
Registriert seit: 22.08.2004
Ort: Trier
Beiträge: 2.735
Gumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekannt
Standard

Die „in_array()“-Funktion sucht nach Werten, nicht nach Schlüsseln. Zudem ist der reguläre Ausdruck nicht ganz richtig.
Hier nun die „getTablename()“-Funktion und der korrekte reguläre Ausdruck:
PHP-Code:
function getTablename$name )
{
    global 
$tablename;
    if( !isset(
$tablename[$name]) ) {
        die(
'Tabelle '.$name.' nicht gefunden.');
    }
    return 
$tablename[$name];
}

$plattern '/%table:([^%]+)%/e'
Der Rest kann so bleiben.
__________________
Markus Wulftange
Mit Zitat antworten
  #18 (permalink)  
Alt 20.01.2008, 17:42
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 06.04.2005
Ort: Kuchen
Beiträge: 119
Dani@okraina befindet sich auf einem aufstrebenden Ast
Standard

Dankeschön es funtioniert

EDIT:

Eine frage hätte ich noch... fox hat gemeint, dass table:"); auch geht und das will ich natürlich auch vermeiden. Wie muss der plattern dann heißen, wenn ich nur buchstaben und einen untersrich zulassen will, den unterstrich aber nur zwischen 2 wörtern

soweit bin ich schon
PHP-Code:
$plattern '/%table:([a-z]+)%/e'
EDIT:

Dankeschön für die Hilfe. Hab jetzt nach etwas rumprobieren selber raus gefunden
PHP-Code:
 plattern '/%table:([a-z]+|[a-z]+[_][a-z]+)%/e'
Jetzt gibt es noch die frage ob es eine leichtere Lösung gibt. Aber das reicht mir schon...

Geändert von Dani@okraina (20.01.2008 um 18:40 Uhr)
Mit Zitat antworten
  #19 (permalink)  
Alt 20.01.2008, 19:16
Benutzerbild von Gumbo
XHTMLforum-Kenner
 
Registriert seit: 22.08.2004
Ort: Trier
Beiträge: 2.735
Gumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekannt
Standard

Vielleicht:
PHP-Code:
'/%table:([a-z]+(?:_[a-z]+)*)%/e' 
Kommt natürlich darauf an, welche Zeichenketten du zulassen möchtest. Andersherum musst du aber auch berücksichtigen, dass Zeichenketten, die nicht auf das Suchmuster passen, ignoriert und damit auch nicht ersetzt werden.
__________________
Markus Wulftange
Mit Zitat antworten
Sponsored Links
  #20 (permalink)  
Alt 20.01.2008, 20:08
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 06.04.2005
Ort: Kuchen
Beiträge: 119
Dani@okraina befindet sich auf einem aufstrebenden Ast
Standard

Eigendlich soll es nur arbeit erleichtern wenn ich einen Tabellennamen ändern möchte muss ich es nur in der config ändern... aber ich kann ja noch eine abfrage einbauen... preg_replace bietet doch einen countwert anhand dem kann ich es testen...

PHP-Code:
$tablename = array( 'news' => 'news_table''news_c' => 'news_comments''user' => 'user_table' );


function 
getTablename$name )
{
    global 
$tablename;
    if( !isset( 
$tablename[$name] ) )
    {
        die(
'Tabelle '.$name.' nicht gefunden.');
    }
    return 
$tablename[$name];
}
$text 'SELECT authorid FROM';
$plattern '/%table:([a-z]+|[a-z]+[_][a-z]+)%/e';

$text preg_replace$plattern'getTablename("$1")'$text, -1$count);

if(
$count == 0) die('Es wurde nichts ersetzt');
echo 
$text;

?> 
Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

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 aus



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