Toon posts:

[php] regexes probleem

Pagina: 1
Acties:
  • 42 views sinds 30-01-2008

Verwijderd

Topicstarter
Van de onderstaande HTML source wil ik graag enkele elementen rippen :

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
            <tr class="newstitle1">
                <td height="30" width="176" class="backgroundnews">image</td>
                <td height="30" class="backgroundnews">[img]"../images/grey.gif"[/img]</td>
                <td align=left height="30" width="300" valign="bottom" class="newstitle1">
                    <a name="2394"/>
                    titel<br>
                    [img]"images/transparent.gif"[/img]
                </td>
                <td height="30" class="newsdate1" align=right valign="bottom">datum<br>[img]"images/transparent.gif"[/img]</td>
            </tr>
            <tr class="backgroundnews">
                <td colspan="4">[img]"../images/grey.gif"[/img]</td>
            </tr>
            <tr class="backgroundnews">
                <td class="newsbody" colspan=4>
                    text 
                </td>
            </tr>
            <tr class="backgroundnews">
                <td colspan="4">[img]"../images/grey.gif"[/img]</td>
            </tr>


Ik wil dus de titel, de datum en de text rippen.
De datum en ;t plaatje gaan goed, nu wil ik echter de titel en de text rippen, maar dit krijg ik niet voor elkaar. Voor de titel heb ik nu het volgende :

PHP:
1
preg_match('/<a name="[0-9]{4}"\/>[\n|\t|\r]+(.+)<br>/i', $line, $title);


Deze pakt echter niks

[ Voor 26% gewijzigd door Verwijderd op 22-01-2003 12:26 ]


  • Sabbi
  • Registratie: December 2000
  • Laatst online: 23-08 23:25

Sabbi

je denkt aan mij.

oei... stiekum nieuwsberichtjes jatten, mag dat wel volgens de FAQ?

  • Banpei
  • Registratie: Juli 2001
  • Laatst online: 07:35
Verwijderd schreef op 22 januari 2003 @ 12:26:
PHP:
1
preg_match('/<a name="[0-9]{4}"\/>[\n|\t|\r]+(.+)<br>/i', $line, $title);


Deze pakt echter niks
Errr... $line, doet dat wat ik vermoed? Namelijk per regel doorlopen? Of heb je gewoon de variable verkeerd genoemd?? :?

Verwijderd

Topicstarter
Sabbi schreef op 22 januari 2003 @ 12:51:
oei... stiekum nieuwsberichtjes jatten, mag dat wel volgens de FAQ?
Oh, dat weet ik helemaal niet eigenlijk.

PHP:
1
2
3
$fp = fopen("URL hier","r");
while (!feof($fp)) {
    $line = fgets($fp, 2048);


hij loopt dus regel voor regel het bestand door. Ik denk dat het ligt aan die witregels of iets dergelijks, maar ik heb geprobeerd om die eruit te filteren, maar dan deed hij het nog niet.

[ Voor 57% gewijzigd door Verwijderd op 22-01-2003 12:59 ]


Verwijderd

$line .= fgets($fp, 2048);

anders heb je alleen de laatste regel in je $line staan

en hou er rekening mee als de regel langer is dan 2048 bytes dan leest moet die meerdere keren lezen om de hele regel te krijgen

[ Voor 42% gewijzigd door Verwijderd op 22-01-2003 13:00 ]


Verwijderd

Topicstarter
nee, want in die while loop staat de regular expression, die hem vervolgens op de goede manier echo'd, dus hier kan het niet aan liggen. het hele script, ik heb de overige regexes die het wel doen eruit gehaald om het overzichtelijk te houden :

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?
$fp = fopen("URL","r");
$grab = false;

while (!feof($fp)) {
    $line .= fgets($fp, 2048);
    if (eregi("          <tr class=\"newstitle1\">" , $line))
        $grab = true;
    if (eregi("<span class='newsNav'>" , $line))
        $grab = false;
    
    if ($grab){
        preg_match('/<a name="[0-9]{4}"\/>[\n|\t|\r]+(.+)<br>/i', $line, $title);

        if ($title[1])
            echo $title[1]."<br />\n";
    }
}
fclose($fp);
?>

[ Voor 84% gewijzigd door Verwijderd op 22-01-2003 13:02 ]


Verwijderd

ah dat kan ik dus niet ruiken :)

dan zit je probleem in wat ik zei...
hij leest de regel per regel en wat jij wil is dat je een stukje uit de totale tekst zoekt

<a name="XXX">
tekst<br>

en fgets stopt bij het aantal bytes wat je opgeeft op bij een newline of bij een EOF

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<? 
$fp = fopen("URL","r"); 
$grab = false; 
$line = ""; // Be sure $line contains NOTHING :)

while (!feof($fp))
    $line .= fgets($fp, 2048); 

    if (eregi("          <tr class=\"newstitle1\">" , $line)) 
        $grab = true; 
    if (eregi("<span class='newsNav'>" , $line)) 
        $grab = false; 
     
    if ($grab){ 
        preg_match('/<a name="[0-9]{4}"\/>[\n|\t|\r]+(.+)<br>/i', $line, $title); 

        if ($title[1]) 
            echo $title[1]."<br />\n"; 
} 
fclose($fp); 
?> 


aan zo iets moet je denk dus de regexp niet in de while loop want anders zoek je op regelbasis en kan je niet een regexp gebruiken die over 2 regels gaat....

snap et vous?

[ Voor 58% gewijzigd door Verwijderd op 22-01-2003 13:05 ]


Verwijderd

Topicstarter
Ik snap wat je bedoeld, nu heb ik dus de while loop afgesloten zodat de hele html file en gegevens zich in line bevinden. Maar wanneer ik dan de regular expressions erover gooi, pakt hij alleen de eerste waarde !

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
$fp = fopen("URL","r");
while (!feof($fp)) {
    $line .= fgets($fp, 4096);
}
fclose($fp);

$line = stripslashes($line);
preg_match('/[img]"(.+?)"[/img]/i', $line, $images);
preg_match('/<a name="[0-9]{4}"\/>[\n|\t|\r]+(.+)<br>/i', $line, $title);

if ($images[1])
    echo $images[1]."<br />\n";

$message[1] = strip_tags($message[1]);

?>

  • martinvw
  • Registratie: Februari 2002
  • Laatst online: 14-12-2025
preg_match_all

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1

Dit topic is gesloten.