Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.38 veröffentlicht (30.04.24)


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste
Reguläerer Ausdruck -> Fehler...
#1
Hi Leute...
Ich weis echt nicht mehr weiter.

In einen meiner neuesten Plugins benutze ich die myBB interne Funktion find_replace_templatesets().
Diese funktioniert auch sehr gut jedoch nicht immer...

Ich habe folgendes genommen, er entfernt mir aber den Text nicht.
PHP-Code:
find_replace_templatesets("forumbit_depth1_cat"'#<div id=\"Tab_{\$forum[\'fid\']}\" class=\"singleTab\">(\r?)\n#i'""0); 

Zum hinzufügen habe ich folgendes geschreiben:
PHP-Code:
find_replace_templatesets("forumbit_depth1_cat"'#<table#si'"<div id=\"Tab_{\$forum['fid']}\" class=\"singleTab\">\n<table"); 

Das hinzufügen klappt prima jedoch bekomme ich das hinzugefügt einfach nicht mehr weg...

Sieht irgendwer, was ich da falsch mache??
Wäre über jede Hilfe dankbar Wink

MfG Megaleecher
Höre nie auf besser zu werden, weil dann hast du aufgehört gut zu sein.
Zitieren
#2
Wenn das ein regulärer Ausdruck ist, und du Zeichen mit Sonderbedeutung ($ Zeilenende, [] Zeichengruppe, {} Anzahl usw.) benutzen willst, musst du sie escapen. Am einfachsten mit preg_quote().

Also '#'.preg_quote('bla $ fasel []').'#i' oder so.

Den $ hattest du in deinem Beispiel schon escaped obwohl das in ' nicht nötig sein sollte. Für reguläre Ausdrücke dagegen schon nötig (solltest du dann aber \\ schreiben damit der \ auch im String und damit bei preg_replace ankommt).

Hilft das?
Zitieren
#3
Danke für diese ausführliche Antwort.
Hat mir sehr geholfen Wink

Die eckige Klammer war der Hund^^

Die geschwungene KIammer stört ihm nicht.

Das mit preg_quote werd ich mir mal ansehen, sihet ja sehr vielversprechend aus.

Was meinst du mit \\ damit der einfach ankommt??

Das versteh ich nciht...

Was ich auch komisch finde wieso brauche ich \\\\ um einen einfachen \ wegzubekommen??
Das haben wir zwar in der Schule gelernt, ich checks aber einfach nicht...

MfG Megaleecher
Höre nie auf besser zu werden, weil dann hast du aufgehört gut zu sein.
Zitieren
#4
Naja, das was du in die PHP Datei schreibst, das sieht erstmal der PHP-Parser. Der macht dann wenn er "blafasel" sieht einen String mit dem Wert blafasel daraus.

In der PHP Datei muss man Zeichen escapen können, um einen String mit dem Wert " schreiben zu können, dazu schreibst du "\"". Der \ wird vom Parser ausgewertet, ist nicht Teil des Strings, der String besteht aus nur einem Zeichen, ".

D.h. der Parser schluckt schon mal ein \. Um einen String mit dem Wert \ zu schreiben muss du "\\" schreiben.

Wenn du nun einen String einer Funktion übergibst, die ihrerseits Escapes sehen will, musst du halt auf einmal "\\\\" schreiben, um einen String mit dem Wert \\ zu erzeugen, der von der Funktion wiederum - weil sie selbst escapes auswertet - auf \ reduziert wird, sprich die Regexp matcht dann einen einzelnen \ in diesem Fall.

Das kann dann stellenweise ziemlich eklig werden, ich musste auch schon mal \\\\\\\\\\\\\\\\ schreiben. Wink

Wobei man bei PCRE alternativ auch mit \Q und \E (geschrieben als \\Q \\E) arbeiten kann. Was die Regexp unleserlicher macht ist situationsabhängig.
Zitieren
#5
Oh mann...

Ich bin schon fast am verzweifeln...
Die Ausdrücke wollen einfach nicht hinhauen...

PHP-Code:
find_replace_templatesets("index"'#{\$headerinclude}#si'"{\$headerinclude}\n{\$tabs_headerinclude}");
    
find_replace_templatesets("index"'#{\$footer}#si'"{\$footer}\n{\$tabs_body_onload}");
    
find_replace_templatesets("index"'#{\$forums}#si'"{\$tabs_prefix}\n{\$forums}\n{\$tabs_postfix}"); 

und dann noch diese:
PHP-Code:
    find_replace_templatesets("index"'#{\$tabs_headerinclude}(\r?)\n#si'""0);
    
find_replace_templatesets("index"'#(\r?)\n{\$tabs_body_onload}#si'""0);
    
find_replace_templatesets("index"'#{\$tabs_prefix}(\r?)\n#si'""0);
    
find_replace_templatesets("index"'#(\r?)\n{\$tabs_postfix}#si'""0); 

Was ich so merkwürdig finde ist, dass er das $tabsheaderinclude ohne Probleme hinzufügt und entfernt...
Nur die anderen wollen einfach nicht.
Ich weis einfach nicht mehr weiter bzw. was ich da falsch mache...

Hoffentlich findet sihc wer, der mir da helfen kann Wink

MfG Megaleecher
Höre nie auf besser zu werden, weil dann hast du aufgehört gut zu sein.
Zitieren
#6
Probiere:
PHP-Code:
find_replace_templatesets("index"'#'.preg_quote('{$headerinclude}').'#si'"{\$headerinclude}\n{\$tabs_headerinclude}");
    
find_replace_templatesets("index"'#'.preg_quote('{$footer}').'#si'"{\$footer}\n{\$tabs_body_onload}");
    
find_replace_templatesets("index"'#'.preg_quote('{$forums}').'#si'"{\$tabs_prefix}\n{\$forums}\n{\$tabs_postfix}"); 
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#7
Es funktioniert noch immer nicht...

Er ersetzt nur das $tabs_headerinclude...
Die anderen werden einfach nicht ersetzt...

Hier mal das Template index wo die Regulären Ausdrücke angewendet werden:
PHP-Code:
<html>
<
head>
<
title>{$mybb->settings['bbname']}</title>
{
$headerinclude}
{
$overview_headerinclude}
<
script type="text/javascript">
<!--
    
lang.no_new_posts "{$lang->no_new_posts}";
    
lang.click_mark_read "{$lang->click_mark_read}";
// -->
</script>
</
head>
<
body>
{
$header}
{
$overview}
{
$forums}
{
$boardstats}

<
dl class="forum_legend smalltext">
    <
dt><img src="{$theme['imgdir']}/on.gif" alt="{$lang->new_posts}title="{$lang->new_posts}style="vertical-align: middle; padding-bottom: 4px;" /></dt>
    <
dd>{$lang->new_posts}</dd>

    <
dt><img src="{$theme['imgdir']}/off.gif" alt="{$lang->no_new_posts}title="{$lang->no_new_posts}style="vertical-align: middle; padding-bottom: 4px;" /></dt>
    <
dd>{$lang->no_new_posts}</dd>

    <
dt><img src="{$theme['imgdir']}/offlock.gif" alt="{$lang->forum_locked}title="{$lang->forum_locked}style="vertical-align: middle;" /></dt>
    <
dd>{$lang->forum_locked}</dd>
</
dl>
<
br style="clear: both" />
{
$footer}
</
body>
</
html

MfG Megaleecher
Höre nie auf besser zu werden, weil dann hast du aufgehört gut zu sein.
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Regulärer Ausdruck Zwoetzen 8 3.347 01.02.2009, 18:44
Letzter Beitrag: Zwoetzen