Tom: preg_match_all

Hallo Leute,

ich mühe mich ab mit preg_match_all. Das sah so einfach aus.

Was ist falsch an der Funktion?

function get_rows($data)
{
  preg_match_all ("|<tr>\s*(.*)\s*</tr>|U",$data,
                  $out[],PREG_PATTERN_ORDER);

if (!is_array($out)) return false;

$ret = array();
  foreach ($out as $line)
  {
    $ret[] = $line[1][0];
  }
  return $ret;
}

Ich will nun nach und nach eine Tabelle auseinandernehmen. Könnt Ihr mir helfen?

Grüße

Tom

  1. Hi,

    preg_match_all ("|<tr>\s*(.*)\s*</tr>|U",$data, out[],PREG_PATTERN_ORDER);

    hast Du schon folgendes versucht:
    preg_match_all ("/|<tr>\s*(.*)\s*</tr>|U/",$data,$out[],PREG_PATTERN_ORDER);

    Grüße Bernhard

    1. Hallo Bernhard,

      preg_match_all ("|<tr>\s*(.*)\s*</tr>|U",$data, out[],PREG_PATTERN_ORDER);
      hast Du schon folgendes versucht:
      preg_match_all ("/|<tr>\s*(.*)\s*</tr>|U/",$data,$out[],PREG_PATTERN_ORDER);

      Danke für den Versuch, aber klappt auch nicht. Das verrückte ist ja, dass ich ein paar Zeilen tiefer vier ähnliche preg_match_all dirket auf level 1 (also nicht in einer Funktion) stehen habe, und die tun's. Ich kann da absolut keinen Unterschied sehen:

      #####################
      preg_match_all ("|php3?n=(.*)&x=|U",$cell,$out[],PREG_PATTERN_ORDER);
      preg_match_all ("|&x=(.*)&y=|U",$cell,$out[],PREG_PATTERN_ORDER);
      preg_match_all ("|&y=(.*)">|U",$cell,$out[],PREG_PATTERN_ORDER);
      preg_match_all ("|size="3">\s+<b>(.*)</b>|U",$cell,$out[],PREG_PATTERN_ORDER);
      preg_match_all ("|size="2">\s+(.*)<br>|U",$cell,$out[],PREG_PATTERN_ORDER);

      echo "<pre>";
      print_r ($out);
      echo "</pre>";
      ####################

      Wo ist dcenn da der Unterschied?

      Grüße

      Tom

  2. Hallo Leute,

    Nabend

    ich mühe mich ab mit preg_match_all. Das sah so einfach aus.

    Was ist falsch an der Funktion?

    function get_rows($data)
    {
      preg_match_all ("|<tr>\s*(.*)\s*</tr>|U",$data,
                      $out[],PREG_PATTERN_ORDER);

    if (!is_array($out)) return false;

    $ret = array();
      foreach ($out as $line)
      {
        $ret[] = $line[1][0];
      }
      return $ret;
    }

    Ich will nun nach und nach eine Tabelle auseinandernehmen. Könnt Ihr mir helfen?

    function get_rows($data)
    {
      preg_match_all ("|<tr>\s*(.*)\s*</tr>|U",$data,$out[],PREG_PATTERN_ORDER);
      if (!is_array($out)) return false;

    $ret = array();
      foreach ($out[0][0] as $line) {
        $ret[] = $line;
      }
    }

    Dies speichert jeweils den Inhalt zwischen "<tr>" und "</tr>" in $ret.

    Sieht $data z.B. so aus:

    $data = "<tr>blhahh</tr>\n<tr>jldhfjhj2</tr><tr>jdhfh3</tr>";

    ...dann wäre eben

    in $ret[0] = "blhahh"
    in $ret[1] = "jldhfjhj2"
    in $ret[2] = "jdhfh3"

    Mal davoin abgesehen, diese Funktion da, ...dein $ret-Array ist nach dem Funktionsausruf wieder weg (nur bevor du ectl. aus diesem Grunde wieder posten solltest), denn ich möcht ja NICHT annehmen, dass $ret  eine globale Variable ist ;o)...

    Mal davon abgesehen.. die ausgebesserte Funktion geht bei mir ohne Probleme.

    Grüße

    dito.

    Tom

    wfux