preg_match
Ik heb een klein probleem. Eerder, simpelweg gewoon iets dat ik niet weet.
Ik heb een string:
<td><font size="4" color="red">dit wil ik hebben</font></td>
En ik moet hetgeen tussen de <td><font size="4" color="red"> en de </font> in een array krijgen.
Het zijn namelijk 3 regels, exact hetzelfde, alleen met andere inhoud. En ik moet van die drie regels, het geen tussen <td><font size="4" color="red"> en </font></td> in een array hebben.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<table>
<tr>
<td><font size="4"><strong>aanwijspunt:</strong></font></td>
<td><font size="4" color="red">info</font></td>
</tr>
<tr>
<td><font size="4"><strong>aanwijspunt2:</strong></font></td>
<td><font size="4" color="red">info2</font></td>
</tr>
<tr>
<td><font size="4"><strong>aanwijspunt3:</strong></font></td>
<td><font size="4" color="red">info3</font></td>
</tr>
</table>
Heeft iemand een idee hoe ik dit voor elkaar ga krijgen? Ik dacht een preg match, als dit het geval is, zou ik hier graag wat hulp mee hebben.
mvg,
wesley.
Verder, laadt gewoon het document in met DOMDocument en gebruik DOMXPath om de tekst te zoeken die je nodig hebt.
En ik heb die site net geopend, en ik krijg precies terug wat ik al geschreven had.
namelijk: /<td><font size="4"><strong>(.*?)</strong></font></td>/g
Nou weet wel hoe ik 1 match binnen haal, maar ik heb geen idee hoe ik er 3 binnen haal. dat was mijn probleem.
Code (php)
1
2
3
2
3
<?php
preg_match('/<td><font size="4"><strong>(.*?)</strong></font></td>/g', $file, $matches);
?>
preg_match('/<td><font size="4"><strong>(.*?)</strong></font></td>/g', $file, $matches);
?>
edit:
Dit werkt dus ook niet.....
Gewijzigd op 01/01/1970 01:00:00 door wesley Overdijk
preg_match_all()
En je regex zou wat stricter kunnen:
En je regex zou wat stricter kunnen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$string = '<table>
<tr>
<td><font size="4"><strong>aanwijspunt:</strong></font></td>
<td><font size="4" color="red">info</font></td>
</tr>
<tr>
<td><font size="4"><strong>aanwijspunt2:</strong></font></td>
<td><font size="4" color="red">info2</font></td>
</tr>
<tr>
<td><font size="4"><strong>aanwijspunt3:</strong></font></td>
<td><font size="4" color="red">info3</font></td>
</tr>
</table>';
$regex = '_<font size="4" color="red">((?:[^<]+|<(?!/font>)[^<]+)*+)</font>_i';
preg_match_all($regex, $string, $matches);
echo '<pre>'.print_r($matches, true).'</pre>';
?>
$string = '<table>
<tr>
<td><font size="4"><strong>aanwijspunt:</strong></font></td>
<td><font size="4" color="red">info</font></td>
</tr>
<tr>
<td><font size="4"><strong>aanwijspunt2:</strong></font></td>
<td><font size="4" color="red">info2</font></td>
</tr>
<tr>
<td><font size="4"><strong>aanwijspunt3:</strong></font></td>
<td><font size="4" color="red">info3</font></td>
</tr>
</table>';
$regex = '_<font size="4" color="red">((?:[^<]+|<(?!/font>)[^<]+)*+)</font>_i';
preg_match_all($regex, $string, $matches);
echo '<pre>'.print_r($matches, true).'</pre>';
?>
En heeft er iemand een link naar een GOEDE tutorial, een regex is voor mij nog altijd chinees.
wesley schreef op 13.01.2010 17:10:
Maakt me niet zoveel uit of het verboden is. :) De info is publiekelijk, en er staat nergens dat het niet mag van de eigenaar. Dus die discussie stopt hier, daar gaat het topic niet over.
Ik denk niet echt dat je in de positie bent om dat te beslissen, beste knul. Ik wil je best aangeven bij de politie wegens inbreuk op copyright en overtreding van de databankenwet? :-)
wesley schreef op 13.01.2010 17:10:
Maakt me niet zoveel uit of het verboden is. :) De info is publiekelijk, en er staat nergens dat het niet mag van de eigenaar. Dus die discussie stopt hier, daar gaat het topic niet over.
Een bank heeft toch ook niet een bordje hangen:
Quote:
Lieve boefjes,
Willen jullie niet deze bank beroven? Dat mag niet hoor. Niet doen hoor, anders ben je stout en krijg je billenkoek.
Groetjes en heel veel kusjes,
De bankdirecteur.
Willen jullie niet deze bank beroven? Dat mag niet hoor. Niet doen hoor, anders ben je stout en krijg je billenkoek.
Groetjes en heel veel kusjes,
De bankdirecteur.
Eigenlijk vind ik het nogal een kinderlijke gedachte. Nu we het toch over banken hebben, vraag ik mij ook af wat jij met die bank gegevens moet...
wesley schreef op 13.01.2010 19:01:
Bedankt maar, waarom krijg ik hem 2x terug?
Eerste resultaat (index 0) is altijd dat wat het hele pattern matcht. De daarop volgende resultaten zijn de subpattern matches (de stukjes tussen ( en ), met uitzondering van (?:...).
Je kan die subpatterns zelfs een naam geven in PHP, door ze te veranderen naar (?<naam>...).
Een goeie tutorial voor regexp leren ken ik zo niet. Zelf gebruik ik nog wel eens cheat sheet en heel erg veel gewoon proberen met tools zoals Reggy, kleine programmaatjes die een tekst en een pattern slikken en die dat even voor je toepassen. Zijn er ook wel voor windows (of in Javacript wss ook wel, voor in de browser)
Of het illegaal is kan je zo niet zeggen. Google News indexeert ook nieuwssites, tot op heden ook nog niet illegaal. Of het mag of niet hangt puur af van wat je ermee doet.
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
Jelmer schreef op 13.01.2010 19:56:
Eerste resultaat (index 0) is altijd dat wat het hele pattern matcht. De daarop volgende resultaten zijn de subpattern matches (de stukjes tussen ( en ), met uitzondering van (?:...).
Je kan die subpatterns zelfs een naam geven in PHP, door ze te veranderen naar (?<naam>...).
Een goeie tutorial voor regexp leren ken ik zo niet. Zelf gebruik ik nog wel eens cheat sheet en heel erg veel gewoon proberen met tools zoals Reggy, kleine programmaatjes die een tekst en een pattern slikken en die dat even voor je toepassen. Zijn er ook wel voor windows (of in Javacript wss ook wel, voor in de browser)
wesley schreef op 13.01.2010 19:01:
Bedankt maar, waarom krijg ik hem 2x terug?
Eerste resultaat (index 0) is altijd dat wat het hele pattern matcht. De daarop volgende resultaten zijn de subpattern matches (de stukjes tussen ( en ), met uitzondering van (?:...).
Je kan die subpatterns zelfs een naam geven in PHP, door ze te veranderen naar (?<naam>...).
Een goeie tutorial voor regexp leren ken ik zo niet. Zelf gebruik ik nog wel eens cheat sheet en heel erg veel gewoon proberen met tools zoals Reggy, kleine programmaatjes die een tekst en een pattern slikken en die dat even voor je toepassen. Zijn er ook wel voor windows (of in Javacript wss ook wel, voor in de browser)
Die regexr waar ik hierboven naar verwijs kan ook als Adobe AIR applicatie gedownload worden. Dat is dus cross-plaform :-).
( foutje Jelmer?)
@Karl: Niet dat het je ook maar iets aangaat, want het zijn simpelweg jou zaken niet, maar ik heb het nodig voor mezelf. Voor op mijn mini tool scriptje. Als mensen mijn IBAN en BIC nodig hebben dat ik er zelf bij kan, zonder eerst naar die site te gaan. En voor zover ik weet, is er niks ernstigs aan het weten van je eigen bank gegevens, of wel soms?
@Jelmer: Merci voor de uitleg. Vind ik aardig van je. En bedankt voor de cheat sheet, daar kan ik een hoop mee.
Gewijzigd op 01/01/1970 01:00:00 door wesley Overdijk