WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Nybörjarhjälp regular expression (https://www.wn.se/forum/showthread.php?t=5831)

Tvartom 2005-01-30 23:07

Hej!
Är ingen höjdare på regular expression så jag undrar om nån kan visa hur man skriva för att söka igenom och returnera samtliga länkar från ett html-dokument som skulle kunna vara skrivna av följande PHP-kod:

Kod:

<?PHP
echo("<a href=\"javascript:displayMessage('".$msgid."', ".$fm.");\" class='lank2'>".$rubrik."&raquo;</a>");
?>

Jag vill alltså ha ut $msgid, $fm och $rubrik från sidan,
gärna i en array som
Kod:

array(
0 => array("msgid" => ..., "fm" => ..., "rubrik" => ...),
1 => array("msgid" => ...,...)
...
);

för alla poster i html-filen.
(det räcker visserligen med siffer-keys i array:en om det är lättare)

$msgid är en 22-siffrigt sifferkod.
$fm är 0 eller 1
$rubrik är en textsträng med godtycklig längd!
Exempel på några rader ur html-dokumentet:
Kod:

<html>
blabla
<a href="javascript:displayMessage('1096471958673919927738', 0);" class='lank2'>Tryck här&raquo;</a> blabla
blabla<a href="javascript:displayMessage('1096471870257651289544', 0);" class='lank2'>En annan länk&raquo;</a>
</html>

Tacksam för svar!

anders.n 2005-01-31 09:44

Följande borde fungera...

Kod:

<?php

$input="<html>\r\nblabla\r\n<a href=\"javascript:displayMessage('1096471958673919927738', 0);\" class='lank2'>Tryck här&raquo;</a> blabla\r\nblabla<a href=\"javascript:displayMessage('1096471870257651289544', 0);\" class='lank2'>En annan länk&raquo;</a></html>";

$count = preg_match_all("/<a href=\"javascript:displayMessage\('([0-9]+)', ([0-9]+)\);\" class='lank2'>(.{1,40})&raquo;<\/a>/", $input, $matches);

print_r($matches);

for ($i=0;$i<$count;$i++)
{
    print "msgid: ".$matches[1][$i]."\n";
    print "fm: ".$matches[2][$i]."\n";
    print "rubrik: ".$matches[3][$i]."\n\n";
}

?>

Det ger resultatet:
Kod:

Array
(
  [0] => Array
    (
      [0] => <a href="javascript:displayMessage('1096471958673919927738', 0);" class='lank2'>Tryck här&raquo;</a>
      [1] => <a href="javascript:displayMessage('1096471870257651289544', 0);" class='lank2'>En annan länk&raquo;</a>
    )

  [1] => Array
    (
      [0] => 1096471958673919927738
      [1] => 1096471870257651289544
    )

  [2] => Array
    (
      [0] => 0
      [1] => 0
    )

  [3] => Array
    (
      [0] => Tryck här
      [1] => En annan länk
    )

)
msgid: 1096471958673919927738
fm: 0
rubrik: Tryck här

msgid: 1096471870257651289544
fm: 0
rubrik: En annan länk

Dock så är ju den regexpen väldigt strikt och känslig för ändringar i länken.. (andra former av whitespace, omdöpta funktionsnamn/css-klasser, blah, blah...) Nu har den även en gräns på 40 tecken i rubriken..


Alla tider är GMT +2. Klockan är nu 04:08.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson