Pekka bittet um schlüsselfertigen Regex

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Pekka bittet um schlüsselfertigen Regex

    Leute,

    ich sitze an einer Riesengeschichte, mit der ich mich noch bis in die Nacht werde vergnügen dürfen, und bitte deshalb (weil nicht sehr sicher bei Regulären Ausdrücken) drum, ob sich jemand erbarmen möchte und mir einen Regex komplett zusammenbauen. Zum Eigenständig erarbeiten hab ich grad echt nicht die Zeit, und es wär mir eine große Hilfe.

    Ich habe ein IMG-Tag nach dem Muster

    <img src="xyz" style="width: xxx; height: yyyy" [sonstige weitere Attribute]>

    Und brauche ein preg_match, das mir die Bild-src und die Bildbreite (also Zahl mit oder ohne px dahinter) und -Höhe ausgibt.
    Die Breiten- und Höhenangaben sind immer nach diesem Muster aufgebaut, andere Konstellationen (width=xxx usw.) muß die Anweisung nicht verstehen.

    Warum?
    Ich möchte in einen WYSIWYG-Editor direkt im HTML abhängig von ihrer Skalierung dynamisch auf das skalierte Maß vergrößert oder verkleinert ausgeben. Also Benutzer fügt großes Bild aus Digicam ein und verkleinert es direkt im WYSIWYG-Editor mit der Maus auf 300x200 Pixel. Das Quellbild ist aber immer noch groß und kostet Bandbreite und sieht ggf. scheiße aus in der Browserskalierung, deshalb will ich das vom WYSIWYG-Editor generierte IMG-Tag abfangen und die SRC in einen ImageMagick-aufruf umbauen, der das Bild dann Pixelgenau skaliert ausgibt.

    Vielen Dank im Voraus!
    Reaktionen auf eventuelle Vorschläge dann im Laufe des Abends....

  • #2
    Code:
    <?php
    
    $in = 'djh <table width="1" height="0"><a style="width: 12em; height: 0px;">'
    	.'<img src="/p/f.e" style="width: 7px; height: 50%" alt="..."> sdkfgs sdk '
    	.'<img src="../a.b?foo" style="width: 1.2em; height: 50%">';
    
    $out = array('tag', 'src', 'width', 'width_unit', 'height', 'height_unit');
    
    // deckt das alles ab?
    $reg_len = '[\d\.]{1,}';
    $reg_unt = 'px|%|em|ex|pt';
    $reg_val = '('.$reg_len.')('.$reg_unt.')?';
    $reg = '/<img src="([^"]*)" style="width: '.$reg_val.'; height: '.$reg_val.'[;"\'].*>/U';
    
    preg_match_all($reg, $in, $matches);
    $out = array_combine($out, $matches);
    
    // zum Gucken ;)
    header('Content-type: text/plain');
    print_r($out);
    
    ?>
    EDIT:
    Forum frißt Backslash in Regex, klick auf zitat.
    EDIT:
    code-tags statt php, aber Backslash bleibt unsichtbar
    Zuletzt geändert von onemorenerd; 02.11.2006, 22:58.

    Kommentar


    • #3
      OffTopic:
      @onemorenerd

      nimmst du besser die code-tags ... code nix essen backslash
      Kissolino.com

      Kommentar


      • #4
        @onemorenerd: *schmatz*
        Funktioniert traumhaft, und auch noch so perfekt aufgemacht und dokumentier. Wirds also doch noch was mit bisschen schlafen bevor der Tag anfängt. Vielen vielen Dank!

        Kommentar

        Lädt...
        X