php preg_match_all oplossing gezocht.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Nu online

aex351

I am the one

Topicstarter
Ik ben opzoek naar een oplossing in regexp.

PHP:
1
preg_match_all ('/href=["|\'](http\:\/\/.*[!\/])?(.*)["|\']/U', $value, $value);


het volgende pakt het eruit
code:
1
2
3
4
echo '<a href="?var=arg&linkje=nee/"> mijn link </a> <br>';
echo '<a href="http://www.cool.com/?var2=arg&linkje2=nee/"> mijn link </a> <br>';
echo '<a href="index?var3=arg&linkje3=nee/"> mijn link </a> <br>';
echo '<a href="mailto:email@domain_name_here.com">email@domain_name_here.com</a><br>';


code:
1
2
3
4
5
6
7
  [2] => array(4) {
    [0] => string(20) "?var=arg&linkje=nee/"
    [1] => string(42) "http://www.cool.com/?var2=arg&linkje2=nee/"
    [2] => string(27) "index?var3=arg&linkje3=nee/"
    [3] => string(33) "mailto:email@domain_name_here.com"
  }
}


alleen nu onstaat er het probleem dat bij de eerste slash / in http://www.cool.com/? deze ook mee selecteert. ik ben opzoek naar een manier om alleen de query string eruit te selecteren en daar ga ik dus de fout in.

[ Voor 29% gewijzigd door aex351 op 28-04-2006 14:25 ]

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

Als je de querystring wil krijgen, dan kun je toch gewoon parse_url gebruiken? :?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • blizt
  • Registratie: Januari 2003
  • Laatst online: 11-12-2024

blizt

Wannabe-geek

Of $_SERVER['QUERY_STRING']?
edit:

@Hieronder: stom :P Ik zag "querystring" staan in jouw reply en dacht er gelijk aan ;)

[ Voor 42% gewijzigd door blizt op 28-04-2006 14:58 ]

United we stand, and divided we fall


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

Omdat hij blijkbaar niet alleen naar de querystring van de huidige pagina wil kijken. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

PHP:
1
2
3
4
5
6
7
8
$s =  '<a href="?var=arg&linkje=nee/"> mijn link </a> <br>
<a href="http://www.cool.com/?var2=arg&linkje2=nee/"> mijn link </a> <br>
<a href="index?var3=arg&linkje3=nee/"> mijn link </a> <br>
<a href="mailto:email@domain_name_here.com">email@domain_name_here.com</a><br>';

preg_match_all('/ href=(["\'])[^?]*\?(.*?)\1/', $s, $m);

echo '<pre>', print_r($m[2], true), '</pre>';

Links zonder query-string (zoals de laatste) worden niet gematched

edit: er zijn echter cases waar dit fout kan gaan aangezien je geen backreference in een characterclass kan gebruiken, maar om dat op te lossen wordt de regexp eigenlijk te complex en zou ik het ook niet meer met een enkele regulier expressie op willen lossen. Ik zou dan bijvoorbeeld de gehele waarde van het href attribuut matchen en de inhoud daarvan in een losse functie scannen op de aanwezigheid van een querystring.

[ Voor 32% gewijzigd door crisp op 28-04-2006 15:16 ]

Intentionally left blank