Andavos: preg_replace Zahlen zwischen 5 und 22 Erlauben

Hallo,
mit preg_replace lasse ich einen String untersuchen.
Er soll [SIZE=(Zahlen 5 - 22)] ersetzen.

Das (Zahlen 5 - 22) ist dann später eine Zahl, z.B. 11

Ich hab schon folgenden Code:
$text = preg_replace("/[SIZE=([5-9])](.*?)[/SIZE]/si", "<div style=" font-size:\1pt;">\2</font>", $text);

Allerdings geht das nur mit Zahlen zwischen 5 - 9, wenn ich dort eine [5-99] einge, funktioniert es auch nicht.

Wie muss das also aussehen, damit es geht?

MFG
Andavos

--
http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr
  1. Moin!

    Hol einfach die Zahlen aus dem String und prüfe diese auf dem guten alten mathematischen Weg.
    Bau danach den String wieder zusammen.
    Das wirkt nur aufwendiger.

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
  2. Hallo Andavos,

    "<div style=" font-size:\1pt;">\2</font>", $text);

    das \1 ist afaik dafür, um gefundene Teile im regulären Ausdruck nochmal zu verwenden, wenn man z.B. zwei zueinander passende Tags finden will - z.B. gibt dir:
     $str = '<div>foo</div>';
     echo preg_replace("=<(.+?)( )?.*?>(.*?)</\1>=","$3",$str);
    das was innerhalb des div-Elements steht, hier also 'foo', aus. (Der Code sollte funktionieren, ich habe in zwar getestet, aber wer weiß :-)) Um das was eine Klammer "gefressen" hat im ersetzen Teil zu bekommen musst du $1 bis $9 verwenden.

    außerdem - warum öffenest du ein div, schließt aber ein font? btw: zu pt als Einheit für Schriften befrage bitte das Archiv :-)

    Allerdings geht das nur mit Zahlen zwischen 5 - 9, wenn ich dort eine [5-99] einge, funktioniert es auch nicht.

    [5-99] funktioniert nicht, da das bedeutet, dass du eine Zahl aus der Menge 5 bis 9 sowie der 9 haben möchtest (und nicht eine Zahl zwischen 5 und 99). Einem regulären Ausdruck zu sagen, dass du eine Zahl zwischen 5 und 22 möchtest, ist afaik nicht möglich. Du wirst dir vermutlich die gültigen Zahlen einzeln auflisten müssen (bzw. generieren lassen) oder über preg_match() die Zahl und den Inhalt von [size] und [/size] holen, die Zahl prüfen und dann ggf. ersetzen.

    Grüße aus Nürnberg
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
  3. Hallo!

    mit preg_replace lasse ich einen String untersuchen.
    Er soll [SIZE=(Zahlen 5 - 22)] ersetzen.

    Also, ich hab es eben mal eben mit "Gruppen" versucht. Aber ich habe es nur geschaft, 5,6,7,8,9 und 20,21,22 zu finden. Also ich es noch mit 10-19 versucht hatte, wurde auch 23 etc. gefunden. Ich denke das es geht.

    Ganz simpel und ohne weiteres rumprobieren könnte man es so machen.

    [SIZE=(5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22)]

    MfG, André Laugks

    --
    L-Andre @ gmx.de
  4. Moin,

    Allerdings geht das nur mit Zahlen zwischen 5 - 9, wenn ich dort eine [5-99] einge, funktioniert es auch nicht.

    Wie muss das also aussehen, damit es geht?

    Du möchtest also die Zeichen 5 bis 9 oder das Zeichen 1 gefolgt von einem der Zeichen 0 bis 9 oder das Zeichen 2 gefolgt von einem der Zeichen 0 bis 2 ersetzen. Warum schreibst du das nicht hin?

    ([5-9]|1[0-9]|2[0-2])

    --
    Henryk Plötz
    Grüße aus Berlin
    ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
    ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~