Avatar billede fangel Nybegynder
21. marts 2003 - 20:14 Der er 5 kommentarer og
1 løsning

reg.exp til templet system

Hej

har sidet og pudslet lidt med et templet system, ved at smide en <!-- TEMPLET --> ind hvor siden havde brug for at blive delt op...

MEN, da disse skift altid sker i et table, altså en <tr>....</tr>, af gangen der bliver kopieret har jeg tænkt på at ændre det så den søger efter et id="noget"...

lad os altså sige vi har en side med følgende kode...

--- ex.php ---
<html>
<head>
<title>ex</title>
</head>
<body>
hej
<table>
  <tr>
    <td>
      board
    </td>
    <td>
      beskrivelse
    </td>
  </tr>
  <tr id="board">
    <td>
      [BOARD]
    </td>
    <td>
      [BESKRIVELSE]
    </td>
  </tr>
</table>
</body>
<html>
---

så vil jeg gerne have lavet en function (med 2 parameter, $id og $orig_side) der kan klippe strengen op i følgende...

$page['start'] = indholdet fra toppen af siden til <tr  id=\"$id\">

$page['tag'] = indholdet fra <tr id=\"$id\"> til næste </tr>

$page['slut'] = resten af filen...

-

det bedste ville være en funktion der kan håndtere X antal parametre (dog max 5), og så dele $orig_side op så man fx får

$page['start']
$page['tag_1']
$page['mellem_1']
$page['tag_2']
$page['mellem_2']
$page['tag_3']
$page['slut']

hvis I forstår... jeg synes selv det er lidt kryptisk... så den bliver rated "svær"... ;)

Morten "kan ikke finde ud af reg.exp" Fangel
Avatar billede jespernaur Nybegynder
21. marts 2003 - 23:02 #1
Nu prøver vi lige dette her:

function SplitSide( $side, $idarray )
{
  $regex = '/^';

  $resultat = array();

  // Opbyg regex på grundlag af indholdet af $idarray
  foreach($idarray as $id) {
      $regex .= '(.+?)(<tr id="' . $id . '">.+?<\/tr>)';
  }
  $regex .= '(.+)$/is';

  wrtapp( 'regex <' . $regex . ">\n" );

  // Udfør matchen på den angivne streng
  if (preg_match( $regex, $side, $matches )) {
      // OK, opbyg array til at returnere (index 0 er den totale match,
      // den springes over).
      foreach ($matches as $mvar => $mvalue) {
        if ($mvar > 0) {
            $resultat[] = $mvalue;
        }
      }
  }
  else {
      // Ingen match, returner fejl i $resultat[0]
      $resultat[] = 'ingen match';
  }
  return $resultat;
}



  $side = <<<EOD
  <html>
  <head>
  <title>ex</title>
  </head>
  <body>
  hej
  <table>
    <tr>
      <td>
        board
      </td>
      <td>
        beskrivelse
      </td>
    </tr>
    <tr id="board">
      <td>
        [BOARD]
      </td>
      <td>
        [BESKRIVELSE]
      </td>
    </tr>
    <tr id="id2">
      <td>
        [BOARD2]
      </td>
      <td>
        [BESKRIVELSE2]
      </td>
    </tr>
  </table>
  </body>
  <html>
EOD;

  // Tabel over de ønskede 'id'-er. SKAL være i den korrekte rækkefølge
  $idarray = array( 'board', 'id2' );

  $resultat = SplitSide( $side, $idarray );

  // $resultat er nu et array i henhold til:
  //
  // $resultat[0] = $page['start']
  // $resultat[1] = $page['tag_1']
  // $resultat[2] = $page['mellem_1']
  // $resultat[3] = $page['tag_2']
  // $resultat[4] = $page['mellem_2']
  // $resultat[5] = $page['tag_3']
  // ... etc
  // $resultat[xx] = $page['slut']

  foreach ($resultat as $index => $verdi) {
      // echo( 'resultat ' . $index . " = <" . $verdi . "><br>\n" );
  }

Mvh
Jesper Naur
Avatar billede fangel Nybegynder
22. marts 2003 - 08:10 #2
tester lige, det ser meget lovende ud... ;)

Morten
Avatar billede fangel Nybegynder
22. marts 2003 - 08:13 #3
Fatal error: Call to undefined function: wrtapp() in c:\htdocs\bryllupzonen\templet_test.php on line 15

har prøvet at søge på lignene funktioner... men kunne ikke finde en...

kører PHP 4.3.1 som Apache Module på Win XP Pro... ;)

Morten
Avatar billede jespernaur Nybegynder
22. marts 2003 - 08:18 #4
ups, wrtapp er en af mine private testudskrifts-funktioner - jeg har glemt at fjerne linien så du kan roligt smide den ud!
Avatar billede fangel Nybegynder
22. marts 2003 - 08:21 #5
ok... ;)
Avatar billede fangel Nybegynder
22. marts 2003 - 08:27 #6
det virker... ;)

begrundelse:
http://htd.mfa.ath.cx/exp/exp331808.png

fået ud af følgende kode:

---
<?php

function SplitSide( $side, $idarray )
{
  $regex = '/^';

  $resultat = array();

  // Opbyg regex på grundlag af indholdet af $idarray
  foreach($idarray as $id) {
      $regex .= '(.+?)(<tr id="' . $id . '">.+?<\/tr>)';
  }
  $regex .= '(.+)$/is';

  // Udfør matchen på den angivne streng
  if (preg_match( $regex, $side, $matches )) {
      // OK, opbyg array til at returnere (index 0 er den totale match,
      // den springes over).
      foreach ($matches as $mvar => $mvalue) {
        if ($mvar > 0) {
            $resultat[] = $mvalue;
        }
      }
  }
  else {
      // Ingen match, returner fejl i $resultat[0]
      $resultat[] = 'ingen match';
  }
  return $resultat;
}



  $side = <<<EOD
  <html>
  <head>
  <title>ex</title>
  </head>
  <body>
  hej
  <table>
    <tr>
      <td>
        board
      </td>
      <td>
        beskrivelse
      </td>
    </tr>
    <tr id="board">
      <td>
        [BOARD]
      </td>
      <td>
        [BESKRIVELSE]
      </td>
    </tr>
    <tr>
      <td>
        mellem ting
      </td>
      <td>
        anden mellem ting
      </td>
    </tr>
    <tr id="id2">
      <td>
        [BOARD2]
      </td>
      <td>
        [BESKRIVELSE2]
      </td>
    </tr>
  </table>
  </body>
  <html>
EOD;

  // Tabel over de ønskede 'id'-er. SKAL være i den korrekte rækkefølge
  $idarray = array( 'board', 'id2' );

  $resultat = SplitSide( $side, $idarray );

  // $resultat er nu et array i henhold til:
  //
  // $resultat[0] = $page['start']
  // $resultat[1] = $page['tag_1']
  // $resultat[2] = $page['mellem_1']
  // $resultat[3] = $page['tag_2']
  // $resultat[4] = $page['mellem_2']
  // $resultat[5] = $page['tag_3']
  // ... etc
  // $resultat[xx] = $page['slut']

  foreach ($resultat as $index => $verdi) {
    echo( 'resultat ' . $index . " = " . $verdi . "\n\n" );
  }

?>
---

Morten
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester