Forum › PHP / SQL › Topic

Een nieuwe topic in het forum PHP / SQL plaatsen Reageren op dit topic Forum:

[PHP] Links verzamelen

Onderstaande reguliere expressie gebruik ik om linkjes in een nieuwbrief te verzamelen zodat ik deze op kan slaan in de database.

Code tonen/verbergenCodeDeze code in een nieuw vensterDeze code in een tekstveldDeze code in een zip file downloaden
1
/(<a href=(\"|\'))(?!mailto:)([0-9a-zA-Z\=\?\&\-\_\+\%\:\/\. ]{1,})(\"|\')?/i



Nu kwam ik er achter dat wanneer er een URL in een nieuwsbrief voorkomt in de vorm van "www.website.nl/index.php?a=1&amp;b=2&amp;b=3" dan breekt de expressie op de eerste "&amp;" die hij tegen komt.

Wat moet ik aan deze reguliere expressie veranderen zodat deze niet breekt op de "&amp;"?
Stuur een prive bericht
Ik gebruik voor dit soort dingen altijd deze website: http://gskinner.com/RegExr/
geeft een goede hulp bij het creeeren en debuggen van een reguliere expressie.
Hoop dat je er wat aan hebt, ook voor in de toekomst
waar ik iig op uitkwam is:
Code tonen/verbergenCodeDeze code in een nieuw vensterDeze code in een tekstveldDeze code in een zip file downloaden
1
(?<=href\=")[^]+?(?=")


als reguliere expressie bij deze teksten:
Code tonen/verbergenCodeDeze code in een nieuw vensterDeze code in een tekstveldDeze code in een zip file downloaden
1
2
3
4
5
6
7
8
9
10
11
create Share Links to send your expressions to co-workers or link to them on Twitter or your blog [exhttp://RegExr.com?2rjl6] 
<a href="mailto:mailonsmaargauw@webmail.net">mail mij</a>

<
a href="http://www.google.nl/">google</a>
<
a href="www.google.nl">google</a>
<
a href="http://google.nl">google</a>
<
a href="https://google.nl">google</a>
<
a href="https://www.google.nl">google</a>
<
a href="https://google.nl/?help">google</a>
<
a href="https://google.nl/?help=hoi&hoi=help&amp;hoi">google</a>
Built by gskinner.com with Flex 3 [http://adobe.com/go/flex] and Spelling Plus Library for text highlighting [gskinner.com/products/spl].



waarbij alleen de <a href="LINK"></a> wordt meegepakt en de LINK-tekst wordt opgevangen.
Stuur een prive bericht
Dat programma heb ik ook op me PC staan op aanraden van een oud collega.
Alleen snap ik niets van Reguliere Expresies dus vandaar dat ik hier kwam met de vraag.

De regex werkt in het programma ideaal, alleen samen met preg_match_all werkt deze niet.

Quote:

Warning: preg_match_all() [function.preg-match-all]: Unknown modifier '[' in ...



Code tonen/verbergenCodeDeze code in een nieuw vensterDeze code in een tekstveldDeze code in een zip file downloaden
1
2
3
private $linkPattern        '(?<=href\=")[^]+?(?=")';

preg_match_all($this->linkPattern$this->mailingContent$this->linkStack);




Hoe kan het dan dat deze niet werkt als ik hem in het script test?
Stuur een prive bericht
Volgens mij moet je dan deze gebruiken:
Code tonen/verbergenCodeDeze code in een nieuw vensterDeze code in een tekstveldDeze code in een zip file downloaden
1
$linkPattern '/(?<=href\=")[^]+?(?=") /g';


Stuur een prive bericht
Code tonen/verbergenCodeDeze code in een nieuw vensterDeze code in een tekstveldDeze code in een zip file downloaden
1
$linkPattern '/(?<=href\=")[^]+?(?=") /g';



Werkt ook niet, "Warning: preg_match_all() [function.preg-match-all]: Unknown modifier 'g' in".

Dus ben ik even gaan kijken bij de link van Danny, via die pagina kwam ik op de modifiers uit; http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php. Maar daar zie ik geen 'g' bij staan?

Geprobeerd;
Code tonen/verbergenCodeDeze code in een nieuw vensterDeze code in een tekstveldDeze code in een zip file downloaden
1
$linkPattern '/(?<=href\=")[^]+?(?=") /i';



De 'i' om de match case insensitive te maken maar dan krijg ik weer en hele andere melding;

Warning: preg_match_all() [function.preg-match-all]: Compilation failed: missing terminating ] for character class at offset 23 in
Stuur een prive bericht
Quote:
MikeVrind schreef:
Code tonen/verbergenCodeDeze code in een nieuw vensterDeze code in een tekstveldDeze code in een zip file downloaden
1
$linkPattern '/(?<=href\=")[^]+?(?=") /g';



Werkt ook niet, "Warning: preg_match_all() [function.preg-match-all]: Unknown modifier 'g' in".

Dus ben ik even gaan kijken bij de link van Danny, via die pagina kwam ik op de modifiers uit; http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php. Maar daar zie ik geen 'g' bij staan?

Geprobeerd;
Code tonen/verbergenCodeDeze code in een nieuw vensterDeze code in een tekstveldDeze code in een zip file downloaden
1
$linkPattern '/(?<=href\=")[^]+?(?=") /i';



De 'i' om de match case insensitive te maken maar dan krijg ik weer en hele andere melding;

Warning: preg_match_all() [function.preg-match-all]: Compilation failed: missing terminating ] for character class at offset 23 in

'g' is voor global, alle matches of alleen de eerste/laatste. Echter in PHP heb je hier verschillende functies voor preg_match en *_all (global).
Stuur een prive bericht
Zowel preg_match als preg_match_all geven aan dat 'g' een unknown modifier is
Stuur een prive bericht
Quote:
MikeVrind schreef:
Zowel preg_match als preg_match_all geven aan dat 'g' een unknown modifier is

Ja, omdat de functie preg_match_all als 'g' modifier geldt en preg_match zonder 'g'. Het is dus als verschillende functies toegepast ipv het gebruik van de 'g' modifier
Stuur een prive bericht