ugrás a tartalomhoz

PHP preg_match pattern

abicska · 2010. Már. 2. (K), 20.18
Szevasztok Srácok!
Szeretnék egy kis segítséget kérni egy preg_match kiválasztáshoz. Sosem értettem igazán, hogyan kell rendes pattern-t írni, így kérlek írjátok úgy, hogy megérthessem.

Lényeg, hogy adott egy html fájl, amiből ki kellene választani a linkeket és a <a></a> közti szöveget.

<h5>A</h5><a href='downloads.php?cat_id=42' title='Acapellas'>Acapella</a> <span class='small2'>(168)</span><br /><a href='downloads.php?cat_id=31' title='Albums'>Albumok</a> <span class='small2'>(120)</span>

Kivágtam egy részletet belőle, hogy egyértelmű legyen. Ebből a mintából szeretném kiválasztani az URL-eleket és a linkeket.
Tehát körülbelül:

$array(
[0][url] = downloads.php?cat=.....
[0][cim] = Acapella
[1][url] = download....
[1][cim] = Albumok
)

Megköszönném a segítséget!
Ábel
 
1

preg_match_all

Poetro · 2010. Már. 2. (K), 21.16
<?php
header("Content-type: text/plain; charset=utf-8");
$text = <<<__END__
<h5>A</h5><a href='downloads.php?cat_id=42' title='Acapellas'>Acapella</a>
<span class='small2'>(168)</span><br />
<a href='downloads.php?cat_id=31' title='Albums'>Albumok</a>
<span class='small2'>(120)</span>
__END__;
preg_match_all("/
  href=           # Keressük a href-et
  '               # az utána idézőjelben levő rész
  (?P<url>[^']+)  # lesz az URL, azaz, addig megyünk, míg nem találkozunk
  '               # idézőjellel.
  [^>]+>          # Megkeressük a tag záró jelét,
  (?P<name>[^>]+) # ugyanis után szerepel a nevünk,
  <               # majd valami újabb tag vagy az előzőt lezáró elem.
  /sx", $text, $matches, PREG_SET_ORDER);
print_r($matches);
?>
Array
(
    [0] => Array
        (
            [0] => href='downloads.php?cat_id=42' title='Acapellas'>Acapella<
            [url] => downloads.php?cat_id=42
            [1] => downloads.php?cat_id=42
            [name] => Acapella
            [2] => Acapella
        )

    [1] => Array
        (
            [0] => href='downloads.php?cat_id=31' title='Albums'>Albumok<
            [url] => downloads.php?cat_id=31
            [1] => downloads.php?cat_id=31
            [name] => Albumok
            [2] => Albumok
        )

)
2

Nagyon jó!! Nagyon szépen

abicska · 2010. Már. 2. (K), 21.42
Nagyon jó!!
Nagyon szépen köszönöm! Sikerült megértenem a lényeget. Sokat segítettél!
Igazán köszönöm! :)

Ábel
3

Annyit még szeretnék

abicska · 2010. Már. 3. (Sze), 00.02
Annyit még szeretnék kérdezni, hogy a pattern-be hogyan írjam be, ha két szó között space is van:

preg_match_all('/<span title="(?P<name>[^"]+)">/sx'

Erre így nem működik. Mivel kell helyettesítenem a space-t?

Köszönöm!
Ábel
4

x

Poetro · 2010. Már. 3. (Sze), 00.45
Mivel eXtended módban van (x módosító) ezért a space-t \ -dal (\ és space) kell helyettesítened, vagy kiveszed az x módosítót, amit csak a kommentezés kedvéért tettem bele.