PDA

Volledige versie bekijken : [php, reguliere expressies] ahhh ereg doet vaag?


josko
%Europe/Berlin %703 %2006, 16:52
het volgende script:
<?php

$string = '
<ul>

<li>
<a href="?cat=1">
Home
</a>
</li>

<li>
<a href="?cat=2">
Over ons
</a>

</li>

<li>
<a href="?cat=4">
(Klanten Informatie)
</a>
</li>

<li>
<a href="?cat=admin">
Admin
</a>
</li>
</ul>

';

$regs = array();
if( eregi( "<a href=\"[^>]*\"[^>]*>", $string, $regs))
{
foreach ( $regs as $href)
{
echo htmlspecialchars( $href )."<br />";
}
}


?>
geeft alleen
&lt;a href=&quot;?cat=1&quot;&gt;<br />

w00
%Europe/Berlin %753 %2006, 18:04
Begrijp het probleem niet echt, wat wil je dan wel bereiken?

WernerL
%Europe/Berlin %757 %2006, 18:11
Het script doet toch wat ie moet doen? :)
Ja verstel eens duidelijk wat het dan WEL moet doen.

matzo
%Europe/Berlin %769 %2006, 18:27
het zou dacht ik
<a href="?cat=1">
<a href="?cat=2">
<a href="?cat=4"> en
<a href="?cat=admin"> moeten teruggeven;)
(in &lt enz...

w00
%Europe/Berlin %777 %2006, 18:38
Dat er van die gekke tekens in staan komt natuurlijk omdat hij het echo'ed met htmlspecialchars. Lijkt me niet dat dat het probleem is..

BernardV
%Europe/Berlin %780 %2006, 18:43
$regs = array();
if( preg_match_all( "/href=\"(.*?)\"/", $string, $regs))
{
print_r($regs);
}


Succes met je spider! ;)

TheDutch
%Europe/Berlin %833 %2006, 20:00
-------------------

TheDutch
%Europe/Berlin %839 %2006, 20:08
Hier doet je expressie wat hij moet doen. Ik denk dat je de expressie verkeerd gebruikt in PHP. Gebruik preg_match_all() eens die zou alles terug moeten geven :).

BernardV
%Europe/Berlin %843 %2006, 20:15
De expressie van Josko werkt in zijn geval prima, maar als je deze link zou hebben:
<a target="_blank" href="?cat=admin">
Pakt hij hem niet ;)

Dan zou ik hem altijd nog zo pakken:

<a[^>]*href=\"[^>]*\"[^>]*>


//EDIT: Voordeel van (.*?) vind ik dat dat direct in de array komt te staan, dus je hoeft niet verder te parsen om de link te vinden.

Stel je gebruikt:

<a[^>]*href=\"(.*?)\"[^>]*>


Dan zou je zo'n output krijgen:


Array
(
[0] => Array
(
[0] => <a href="?cat=1">
[1] => <a href="?cat=2">
[2] => <a href="?cat=4">
[3] => <a target="_blank" href="?cat=admin">
)

[1] => Array
(
[0] => ?cat=1
[1] => ?cat=2
[2] => ?cat=4
[3] => ?cat=admin
)

)


En kun je dus gelijk $regs[1] gebruiken voor alle links.

TheDutch
%Europe/Berlin %872 %2006, 20:56
Hij is Regular Expressions aan het leren :).

Ik kan ook wel hem deze expression (http://flashfocus.nl/forum/showthread.php?t=21450) geven die zo goed als elke uitzondering afvangt, maar dat helpt hem niet in het leren toch?

BernardV
%Europe/Berlin %875 %2006, 21:01
Hij is Regular Expressions aan het leren :).

Ik kan ook wel hem deze expression (http://flashfocus.nl/forum/showthread.php?t=21450) geven die zo goed als elke uitzondering afvangt, maar dat helpt hem niet in het leren toch?

hehe.. daar heb je een goed punt, maar daarom kan het geen kwaad wat commentaar te geven en een kleine uitleg waarom ;)

TheDutch
%Europe/Berlin %888 %2006, 21:20
Heb je gelijk in :).

josko
%Europe/Berlin %921 %2006, 22:07
Zucht. iedereen denkt zijn ding, maar niet wat er staat!

het resultaat is [zowel met foreach als print_r] alleen de geplaatste quote!

1 linkje maar! hij zou dus alles moeten weergeven!!!
dat is het probleem.

BernardV
%Europe/Berlin %924 %2006, 22:10
Volgens mij heeft eregi alleen 1 match en niet multiple matches..
Daarvoor zou je preg_match_all moeten gebruiken.

//EDIT: Dus de comments kloppen dan wel ;)

josko
%Europe/Berlin %924 %2006, 22:11
nvm, got it!

met preg match moest even de regex met / gestart en beeindigt worden.

bernardV danke schon!



ik kan geen AS :p weinig nut theDutch [bericht eronder]

TheDutch
%Europe/Berlin %946 %2006, 22:43
FYI: Dat moet ook bij AS 3.0 :).