[PHP / REGEXP] Complexe regexp om text uit document te halen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik heb een probleem met reguliere expressie. Ben de hele avond al bezig, maar het wil niet lukken... :'(...

Ik heb een html file met een aantal tabellen erin. Uit deze tabellen wil ik data halen. Ik weet dat die moet kunnen met een reguliere expressie, maar kan er dus niet uit komen.

Onderstaande tabel komt meerdere malen voor in mijn file:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<table summary="">
  <tr>
    <td><img src="variabel, maar oninteressant" alt="" /></td>
    <td><b>**TEXT 1**</td>
  </tr>
  <tr>
    <td colspan="2">
    <p>
      Text met hoop <b>HTML</b> codes erin.
    </p>
    </td>
  </tr>
  <tr>
    <td>variabel, maar oninteressant</td>
    <td><a href="variabel, maar oninteressant">ook ni belangrijk</a> - <b>**TEXT 2**</b></td>
  </tr>
</table>

Nu wil ik text 1, de text tussen de <p>'s en text 2 hier uit vissen dmv. preg_match_all in PHP.

Ik loop vast met het stuk tussen de <p>'s omdat dit een erg variabel stuk is. Er kunnen andere <p> tags in staan, newlines, andere html, alles... Ik krijg het niet voor elkaar...

Iemand?

Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Hoe ziet de preg_mach_all eruit welke je hebt geprobeerd, welke resultaten kreeg je hier uit, en welke had je verwacht?

Zoiets zou het toch moeten doen;
PHP:
1
2
3
4
5
6
7
8
9
preg_match_all("/
  <tr>[[:space:]\r\n\t]*
    <td><b>(.*)</td>[[:space:]\r\n\t]*
  </tr>[[:space:]\r\n\t]*
  <tr>[[:space:]\r\n\t]*
    <td colspan=\"2\">[[:space:]\r\n\t]*
    <p>[[:space:]\r\n\t]*
       (.*)
   </p>/Uis", $content, $preg);


Gewoon van achteren steeds meer weglaten tot het werkt, en dan gaan verfijnen.

[ Voor 61% gewijzigd door frickY op 08-02-2007 22:52 ]


Acties:
  • 0 Henk 'm!

  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

[spam]
http://weitz.de/regex-coach/
[/spam]

Leert terwijl u probeert. ;)

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


Acties:
  • 0 Henk 'm!

  • gerbennn
  • Registratie: November 2003
  • Laatst online: 10-09 17:42
frickY schreef op donderdag 08 februari 2007 @ 22:49:
Hoe ziet de preg_mach_all eruit welke je hebt geprobeerd, welke resultaten kreeg je hier uit, en welke had je verwacht?

Zoiets zou het toch moeten doen;
PHP:
1
2
3
4
5
6
7
8
9
preg_match_all("/
  <tr>[[:space:]\r\n\t]*
    <td><b>(.*)</td>[[:space:]\r\n\t]*
  </tr>[[:space:]\r\n\t]*
  <tr>[[:space:]\r\n\t]*
    <td colspan=\"2\">[[:space:]\r\n\t]*
    <p>[[:space:]\r\n\t]*
       (.*)
   </p>/Uis", $content, $preg);


Gewoon van achteren steeds meer weglaten tot het werkt, en dan gaan verfijnen.
Moet je die slashes niet escapen? Zo dus:
PHP:
1
2
3
4
5
6
7
8
9
preg_match_all("/
  <tr>[[:space:]\r\n\t]*
    <td><b>(.*)<\/td>[[:space:]\r\n\t]*
  <\/tr>[[:space:]\r\n\t]*
  <tr>[[:space:]\r\n\t]*
    <td colspan=\"2\">[[:space:]\r\n\t]*
    <p>[[:space:]\r\n\t]*
       (.*)
   <\/p>/Uis", $content, $preg);

</signature>


Acties:
  • 0 Henk 'm!

Verwijderd

je kunt ook eerst HTML Tidy proberen, als niet alle tags afgesloten zijn, misschien helpt dat ook een beetje?

Acties:
  • 0 Henk 'm!

  • cspare
  • Registratie: Oktober 2006
  • Laatst online: 29-07 22:19

cspare

What the deuce?!

Ben je in staat om de layout van je html aan te passen? Zo ja zou ik om de belangrijke variabele een tag zetten waar je dan je (simplere) regex op los kan laten.
iets als <span id="var1">**TEXT 1**</span>

The one who says it cannot be done, should never interrupt the one who is doing it.

Pagina: 1