PHP preg_match

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben een reguliere expressie aan het verzinnen die een url uit een tabel moet halen, indien nodig zijn het meerdere urls.

Het heeft een paar voorwaarden waaraan hij moet voldoen:
namelijk een nummer wat ergens vooraan de tabel staat een de tekst tussen de link.

als voorbeeld heb je deze tabel

HTML:
1
2
3
<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="6" WIDTH="100%">
<tr><td class="lblauw">Merchant Sequence</td><td class="lblauw">Date Uploaded</td><td class="lblauw">Status</td><td class="lblauw">Download</td></tr><tr><td>2009040814</td><td>2009/04/08</td><td>new</td><td>not available</td><tr><td>5</td><td>2009/02/02</td><td>completed</td><td><a href="http://www.google.nl" target="_new">available</a></td></tr><tr><td>3</td><td>2009/01/29</td><td>processing</td><td>not available</td><tr><td>2</td><td>2009/01/29</td><td>processing</td><td>not available</td><tr><td>1</td><td>2009/01/29</td><td>processing</td><td>not available</td>
</TABLE>


nu is dit een hele regel, maar als je goed kijkt zie je dat bij nummer 2009040814 geen download is not avaible en bij nummer 5 bijvoorbeeld wel met tekst available

Wat ik wil is dat bv een reguliere expressie maak om voor getal 2009040814 de link op te halen (indien deze er is, te zien aan tekst aviable) of voor nummer 5 of voor welk nummer dan ook. De nummers zijn bij mij bekend dus deze kan ik verwerken in de expressie.

Ik ben tot dusver gekomen tot het ophalen van de link met de volgende expressie:

PHP:
1
"/<a href=\"([^\"]*)\" (?:[^>]*)>available<\/a>/sU"


nu moet ik dus alleen nog erin verwerken voor het getal...
Ik heb echter geen idee hoe ik dit kan doen, ik heb wel geprobeerd met

<td>5</td>* erbij te zetten maar dit was niet de oplossing...

hoe kan ik dat beter aanpakken?

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Drop preg_match, en verdiep je eens in DomDocument en XPath?
PHP:
1
2
3
4
5
6
7
8
$doc = new DOMDocument();
if (!@$doc->loadHTML($html)) {
    die("invalid HTML");
}
$xpath = new DOMXPath($doc);
foreach($xpath->query('//table/tr[td[4]="available"]/td[1]') as $node) {
    echo $node->nodeValue;
}

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
met deze code ben ik niet bekend, heb even op php.net gekeken.
Wanneer ik de code probeer, krijg wel precies nummer 5 terug :) dat is natuurlijk wel goed.
Maar de url heb helaas niet en daar gaat het juist om.... en is het mogelijk om meerdere voorwaarden aan de query te koppelen?

Moet alleen de url er nog uit zien te vissen..... maar vraag me af of dat kan, want als ik hem var_dump ziet hij alleen aviable

[ Voor 19% gewijzigd door Verwijderd op 08-04-2009 20:13 ]


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Je kan gewoon om meerdere dingen vragen:
PHP:
6
7
8
9
foreach($xpath->query('//table/tr[td[4]="available"]') as $node) {
    echo $xpath->evaluate('string(td[1])',$node),'=';
    echo $xpath->evaluate('string(td[4]/a/@href)',$node),"\n";
}

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten