WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Hjälp med preg i PHP. (https://www.wn.se/forum/showthread.php?t=32020)

Jine 2008-09-19 16:28

Hej!

Jag har ett litet problem med preg_match_all i php.
Eller snarare, jag skulle behöva hjälp med hur man konstruerade en regexp för att matcha länkar.

Jag har en sträng som innehåller flera rader av länkar i följande struktur:
Kod:

<a href="/xxx" title="xxxx">12312</a> - <a href="exempellänk.php" title="Länk 1 title">haha, jasså?</a>, liten kommentar.
<a href="/xxx" title="xxxx">12312</a> - <a href="exemp_ellnk.php" title="Länk 2 title">absolut sant</a>.

Jag vill plocka ur title="(.*)" och bygga en array av dom.
Hur gör man?

Dvs, få ett resultat likt detta:

Kod:

Array (
    0 = "Länk 1 title"
    1 = "Länk 2 title" 
)

Kod:

preg_match_all('/\<a href="([^"]+)" title="([^"]+)">([^"]+)<\/a>/', $output, $matches);
har jag försökt med, fungerar dock inte.
Jag har slut på idéer.. Hur får man detta att fungera?

Hjälp mig!

// Jim

Silodon 2008-09-19 17:21

Är det någonting sånt här du är ute efter eller missförstår jag?

Kod:

<?php

$str= '<a href="/xxx" title="xxxx">12312</a> - <a href="exempellänk.php" title="Länk 1 title">haha, jasså?</a>, liten kommentar.
        <a href="/xxx" title="xxxx">12312</a> - <a href="exemp_ellnk.php" title="Länk 2 title">absolut sant</a>.';

preg_match_all("/title=\"(.*?)\"/",$str,$matches);

print_r($matches);

?>

Retunerar:

Kod:

Array
(
  [0] => Array
    (
      [0] => title="xxxx"
      [1] => title="Länk 1 title"
      [2] => title="xxxx"
      [3] => title="Länk 2 title"
    )

  [1] => Array
    (
      [0] => xxxx
      [1] => Länk 1 title
      [2] => xxxx
      [3] => Länk 2 title
    )

)


Jine 2008-09-19 19:30

Din kod fungerar helt perfekt. Men ett par undantag.
Slutarrayn blir väldigt rörig, då den plockar ut "xxxx" också.

Jag kan ta bort varannan rad i arrayn, men det blir inte riktigt helt säkert, för ibland har jag upptäckt att det saknas "xxxx" på vissa rader, och tvärt om.

Finns det nåt sätt att plocka ut bara den ANDRA länken's title, och skippa den första helt?

// Jim

Silodon 2008-09-19 20:14

Om din data ser exakt likadan ut som ditt exempel förutom title-taggarna så borde detta fungera.

Kod:

<?php

$str= '<a href="/xxx" title="xxxx">12312</a> - <a href="exempellänk.php" title="Länk 1 title">haha, jasså?</a>, liten kommentar.
        <a href="/xxx" title="xxxx">12312</a> - <a href="exemp_ellnk.php" title="Länk 2 title">absolut sant</a>.
<a href="/xxx">12312</a> - <a href="exempellänk.php" title="Länk 3 title">haha, jasså?</a>, liten kommentar.
        <a href="/xxx" title="xxxx">12312</a> - <a href="exemp_ellnk.php">absolut sant</a>.';

preg_match_all("/ - <a(.*?) title=\"(.*?)\"/",$str,$matches);

print_r($matches);

?>

Retunerar:
Kod:

...

 * *[2] => Array
 * * * *(
 * * * * * *[0] => Länk 1 title
 * * * * * *[1] => Länk 2 title
 * * * * * *[2] => Länk 3 title
 * * * *)
)



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

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