PDA

Bekijk Volledige Versie : Link in nieuw venster openen



[ Martin ]
29/05/03, 20:05
Beste nieuwsgroep, via de volgende code kan er sportnieuws van de website
www.nl.nu worden gehaald:

<?php
$adres = "http://nu.nl/deeplink_html/";
$begin = "<b>Sport</b>";
$eind = "<b>Net</b>";
$openen = fopen("$adres", "r");
$lezen = fread($openen, 200000);
$data = eregi("$begin(.*)$eind", $lezen, $tekst);
fclose($openen);
$tekst[1] = str_replace ("/novum/","http://nu.nl/novum/",$tekst[1]);
echo $tekst[1];
?>

Wat moet ik toevoegen om de links in een nieuw venster te laten openen?


--
Vriendelijke groeten,
Martin Reedijk

-------------------------------------------------------------
Converteren tussen Audio CD, MP3, mp3PRO, WMA, etc.
Zie www.WinampNederlands.nl > Muziek >> Converteren

Rick
29/05/03, 20:35
"[ Martin ]" <[ Martin ] @www.WinampNederlands.nl> schreef in bericht
news:bb5hfc$2ur2$1@nl-news.euro.net...
> Beste nieuwsgroep, via de volgende code kan er sportnieuws van de website
> www.nl.nu worden gehaald:
>
> <?php
> $adres = "http://nu.nl/deeplink_html/";
> $begin = "<b>Sport</b>";
> $eind = "<b>Net</b>";
> $openen = fopen("$adres", "r");
> $lezen = fread($openen, 200000);
> $data = eregi("$begin(.*)$eind", $lezen, $tekst);
> fclose($openen);
> $tekst[1] = str_replace ("/novum/","http://nu.nl/novum/",$tekst[1]);
> echo $tekst[1];
> ?>
>
> Wat moet ik toevoegen om de links in een nieuw venster te laten openen?
>
Het kan eventueel met een target :) (of een base href)

--
Slechte webdesigners? Geef ze hier aan:
http://webdesignert.vectoris.nl/

[ Martin ]
29/05/03, 21:20
>> <?php
>> $adres = "http://nu.nl/deeplink_html/";
>> $begin = "<b>Sport</b>";
>> $eind = "<b>Net</b>";
>> $openen = fopen("$adres", "r");
>> $lezen = fread($openen, 200000);
>> $data = eregi("$begin(.*)$eind", $lezen, $tekst);
>> fclose($openen);
>> $tekst[1] = str_replace ("/novum/","http://nu.nl/novum/",$tekst[1]);
>> echo $tekst[1];

>> Wat moet ik toevoegen om de links in een nieuw venster te laten
>> openen?

> Het kan eventueel met een target :) (of een base href)

Ja, dat begrijp ik (target="_blank"). Maar waar plaats ik dat in de code?

--
Vriendelijke groeten,
Martin Reedijk

-------------------------------------------------------------
Converteren tussen Audio CD, MP3, mp3PRO, WMA, etc.
Zie www.WinampNederlands.nl > Muziek >> Converteren

Rick
29/05/03, 22:05
"[ Martin ]" <[ Martin ] @www.WinampNederlands.nl> schreef in bericht
news:bb5m14$31fa$1@nl-news.euro.net...
> >> <?php
> >> $adres = "http://nu.nl/deeplink_html/";
> >> $begin = "<b>Sport</b>";
> >> $eind = "<b>Net</b>";
> >> $openen = fopen("$adres", "r");
> >> $lezen = fread($openen, 200000);
> >> $data = eregi("$begin(.*)$eind", $lezen, $tekst);
> >> fclose($openen);
> >> $tekst[1] = str_replace ("/novum/","http://nu.nl/novum/",$tekst[1]);
> >> echo $tekst[1];
>
> >> Wat moet ik toevoegen om de links in een nieuw venster te laten
> >> openen?
>
> > Het kan eventueel met een target :) (of een base href)
>
> Ja, dat begrijp ik (target="_blank"). Maar waar plaats ik dat in de code?
>
> --
> Vriendelijke groeten,
> Martin Reedijk

Ik gok in het gedeelte waar de link komt...
--
Slechte webdesigners? Geef ze hier aan:
http://webdesignert.vectoris.nl/

Marcus
29/05/03, 23:20
[ Martin ] wrote:
>>> <?php
>>> $adres = "http://nu.nl/deeplink_html/";
>>> $begin = "<b>Sport</b>";
>>> $eind = "<b>Net</b>";
>>> $openen = fopen("$adres", "r");
>>> $lezen = fread($openen, 200000);
>>> $data = eregi("$begin(.*)$eind", $lezen, $tekst);
>>> fclose($openen);
>>> $tekst[1] = str_replace ("/novum/","http://nu.nl/novum/",$tekst[1]);
>>> echo $tekst[1];
>
>>> Wat moet ik toevoegen om de links in een nieuw venster te laten
>>> openen?
>
>> Het kan eventueel met een target :) (of een base href)
>
> Ja, dat begrijp ik (target="_blank"). Maar waar plaats ik dat in de
> code?

$tekst[1] = str_replace ("/novum/","http://nu.nl/novum/",$tekst[1]);
$tekst[1] = str_replace ("/\<a(.*?)\>/","<a\1
target=\"blank\">",$tekst[1]);
echo $tekst[1];

(dus: s/\<a(.*?)\>/\<\1 target\=\"blank\"\>/g )
Tenzij dat in PHP niet kan (ik ben perl gewend, dus als deze regex niet
kan, kan iemand dan ff dit omzetten naar correcte php?)

Mark

[ Martin ]
30/05/03, 07:35
Marcus bracht mij tot de volgende reactie:
>> <?php
>> $adres = "http://nu.nl/deeplink_html/";
>> $begin = "<b>Sport</b>";
>> $eind = "<b>Net</b>";
>> $openen = fopen("$adres", "r");
>> $lezen = fread($openen, 200000);
>> $data = eregi("$begin(.*)$eind", $lezen, $tekst);
>> fclose($openen);
>> $tekst[1] = str_replace
>> ("/novum/","http://nu.nl/novum/",$tekst[1]); echo $tekst[1];

>> Wat moet ik toevoegen om de links in een nieuw venster te laten
>> openen?

> $tekst[1] = str_replace ("/novum/","http://nu.nl/novum/",$tekst[1]);
> $tekst[1] = str_replace ("/\<a(.*?)\>/","<a\1
> target=\"blank\">",$tekst[1]);
> echo $tekst[1];
>
> (dus: s/\<a(.*?)\>/\<\1 target\=\"blank\"\>/g )
> Tenzij dat in PHP niet kan (ik ben perl gewend, dus als deze regex
> niet kan, kan iemand dan ff dit omzetten naar correcte php?)

Hoi Mark, bedankt voor je inspanningen. Inderdaad werkt dit niet in PHP,
hopelijk kan iemand dit voor mij omzetten?

Alvast heel hartelijk dank.

--
Vriendelijke groeten,
Martin Reedijk

-------------------------------------------------------------
Converteren tussen Audio CD, MP3, mp3PRO, WMA, etc.
Zie www.WinampNederlands.nl > Muziek >> Converteren

Marcus
30/05/03, 09:35
[ Martin ] wrote:
> Marcus bracht mij tot de volgende reactie:
>>> <?php
>>> $adres = "http://nu.nl/deeplink_html/";
>>> $begin = "<b>Sport</b>";
>>> $eind = "<b>Net</b>";
>>> $openen = fopen("$adres", "r");
>>> $lezen = fread($openen, 200000);
>>> $data = eregi("$begin(.*)$eind", $lezen, $tekst);
>>> fclose($openen);
>>> $tekst[1] = str_replace
>>> ("/novum/","http://nu.nl/novum/",$tekst[1]); echo $tekst[1];
>
>>> Wat moet ik toevoegen om de links in een nieuw venster te laten
>>> openen?
>
>> $tekst[1] = str_replace ("/novum/","http://nu.nl/novum/",$tekst[1]);
>> $tekst[1] = str_replace ("/\<a(.*?)\>/","<a\1
>> target=\"blank\">",$tekst[1]);
>> echo $tekst[1];
>>
>> (dus: s/\<a(.*?)\>/\<\1 target\=\"blank\"\>/g )
>> Tenzij dat in PHP niet kan (ik ben perl gewend, dus als deze regex
>> niet kan, kan iemand dan ff dit omzetten naar correcte php?)
>
> Hoi Mark, bedankt voor je inspanningen. Inderdaad werkt dit niet in
> PHP, hopelijk kan iemand dit voor mij omzetten?

Ik heb even gezocht en je moet ereg_replace gebruiken:

$tekst[1] =ereg_replace ("/\<a(.*?)\>/",
"<a\\1>> target=\"blank\">",$tekst[1]);

Als het goed is doet die regel het wel.

Mark

[ Martin ]
30/05/03, 12:50
Hoi Marcus,

volgens je reactie..:

> Ik heb even gezocht en je moet ereg_replace gebruiken:
>
> $tekst[1] =ereg_replace ("/\<a(.*?)\>/",
> "<a\\1>> target=\"blank\">",$tekst[1]);

Moet dit dus de code worden..:

<?php
$adres = "http://nu.nl/deeplink_html/";
$begin = "<b>Sport</b>";
$eind = "<b>Net</b>";
$openen = fopen("$adres", "r");
$lezen = fread($openen, 200000);
$data = eregi("$begin(.*)$eind", $lezen, $tekst);
fclose($openen);
$tekst[1] = str_replace
("/novum/","http://nu.nl/novum/",$tekst[1]); echo $tekst[1];
$tekst[1] =ereg_replace ("/\<a(.*?)\>/",
"<a\\1>> target=\"blank\">",$tekst[1]);
?>

Dit geeft geen verandering, wat wil zeggen dat een link in hetzelfde venster
wordt geopend.

Draai je het om, dus als volgt:

<?php
$adres = "http://nu.nl/deeplink_html/";
$begin = "<b>Sport</b>";
$eind = "<b>Net</b>";
$openen = fopen("$adres", "r");
$lezen = fread($openen, 200000);
$data = eregi("$begin(.*)$eind", $lezen, $tekst);
fclose($openen);
$tekst[1] = str_replace
("/novum/","http://nu.nl/novum/",$tekst[1]);
$tekst[1] =ereg_replace ("/\<a(.*?)\>/",
"<a\\1>> target=\"blank\">",$tekst[1]);
echo $tekst[1];
?>

....wordt er geen tekst (nieuws) meer getoond.

Hopelijk heb je nog een oplossing.


--
Vriendelijke groeten,
Martin Reedijk

-------------------------------------------------------------
Converteren tussen Audio CD, MP3, mp3PRO, WMA, etc.
Zie www.WinampNederlands.nl > Muziek >> Converteren

Marcus
30/05/03, 13:05
[ Martin ] wrote:
> Hoi Marcus,
>
> volgens je reactie..:
>
>> Ik heb even gezocht en je moet ereg_replace gebruiken:
>>
>> $tekst[1] =ereg_replace ("/\<a(.*?)\>/",
>> "<a\\1>> target=\"blank\">",$tekst[1]);
>
> Moet dit dus de code worden..:
>
> <?php
> $adres = "http://nu.nl/deeplink_html/";
> $begin = "<b>Sport</b>";
> $eind = "<b>Net</b>";
> $openen = fopen("$adres", "r");
> $lezen = fread($openen, 200000);
> $data = eregi("$begin(.*)$eind", $lezen, $tekst);
> fclose($openen);
> $tekst[1] = str_replace
> ("/novum/","http://nu.nl/novum/",$tekst[1]); echo $tekst[1];
> $tekst[1] =ereg_replace ("/\<a(.*?)\>/",
> "<a\\1>> target=\"blank\">",$tekst[1]);
>>
>
> Dit geeft geen verandering, wat wil zeggen dat een link in hetzelfde
> venster wordt geopend.

$tekst[1] =ereg_replace ("/\<a(.*?)\>/",
"<a\\1>> target=\"blank\">",$tekst[1]);

Dit is fout (sorry), die >> moet weg.

Mark

[ Martin ]
30/05/03, 13:20
Sorry Markus, daar ben ik weer. De code is nu als volgt:

?php
$adres = "http://nu.nl/deeplink_html/";
$begin = "<b>Sport</b>";
$eind = "<b>Net</b>";
$openen = fopen("$adres", "r");
$lezen = fread($openen, 200000);
$data = eregi("$begin(.*)$eind", $lezen, $tekst);
fclose($openen);
$tekst[1] = str_replace
("/novum/","http://nu.nl/novum/",$tekst[1]); echo $tekst[1];
$tekst[1] =ereg_replace ("/\<a(.*?)\>/",
"<a\\1>> target=\"blank\">",$tekst[1]);
?>

Dit resulteert dat de link http://www.mijndomein.nl/http://nu.nl/novum/ ...
wordt.

In de originele code

?php
$adres = "http://nu.nl/deeplink_html/";
$begin = "<b>Sport</b>";
$eind = "<b>Net</b>";
$openen = fopen("$adres", "r");
$lezen = fread($openen, 200000);
$data = eregi("$begin(.*)$eind", $lezen, $tekst);
fclose($openen);
$tekst[1] = str_replace
("/novum/","http://nu.nl/novum/",$tekst[1]); echo $tekst[1];
?>

wordt http://mijndomein.nl vervangen door http://nu.nl/..., dus dan werkt de
link wel. Behalve dat de link met de nieuwe code niet werkt, wordt er ook
nog steeds geen nieuw venster geopend...

Ben ik erg vervelend?

--
Vriendelijke groeten,
Martin Reedijk

-------------------------------------------------------------
Converteren tussen Audio CD, MP3, mp3PRO, WMA, etc.
Zie www.WinampNederlands.nl > Muziek >> Converteren

Marcus
30/05/03, 13:35
[ Martin ] wrote:
> Sorry Markus, daar ben ik weer. De code is nu als volgt:
[knip]
>
> Ben ik erg vervelend?

Nee hoor, maar misschien kan je een link naar je pagina geven? Het is
voor mij zo ook maar wat gissen.

Mark

[ Martin ]
30/05/03, 13:35
Marcus bracht mij tot de volgende reactie:
>> Sorry Markus, daar ben ik weer. De code is nu als volgt:
>> [knip]

> Nee hoor, maar misschien kan je een link naar je pagina geven? Het is
> voor mij zo ook maar wat gissen.
>
> Mark

Ik heb ff een test pagina'tje gemaakt:

www.winampnederlands.nl/test/

hopelijk helpt het je verder.

Bedankt weer alvast :-)
--
Vriendelijke groeten,
Martin Reedijk

-------------------------------------------------------------
Converteren tussen Audio CD, MP3, mp3PRO, WMA, etc.
Zie www.WinampNederlands.nl > Muziek >> Converteren

[ Martin ]
30/05/03, 13:50
> Ik heb ff een test pagina'tje gemaakt:
>
> www.winampnederlands.nl/test/
>
> hopelijk helpt het je verder.
>
> Bedankt weer alvast :-)

Je ziet dat de link van een nieuwsitem nu

<a
href="/http://nu.nl/novum//article.phtml?url=sport/infostrada.05-22-2003.003
8.xml">Krajicek niet naar Roland Garros</a>

wordt, dan zou dus

<a
href=http://nu.nl/novum//article.phtml?url=sport/infostrada.05-22-2003.0038.
xml target="_blank">Krajicek niet naar Roland Garros</a>

moeten zijn... Enig idee hoe ik dat voor elkaar krijg?

--
Vriendelijke groeten,
Martin Reedijk

-------------------------------------------------------------
Converteren tussen Audio CD, MP3, mp3PRO, WMA, etc.
Zie www.WinampNederlands.nl > Muziek >> Converteren

Daniel Tryba
30/05/03, 14:20
[ Martin ] <[ Martin ] @www.winampnederlands.nl> wrote:
> Je ziet dat de link van een nieuwsitem nu
>
> <a
> href="/http://nu.nl/novum//article.phtml?url=sport/infostrada.05-22-2003.003
> 8.xml">Krajicek niet naar Roland Garros</a>
>
> wordt, dan zou dus
>
> <a
> href=http://nu.nl/novum//article.phtml?url=sport/infostrada.05-22-2003.0038.
> xml target="_blank">Krajicek niet naar Roland Garros</a>
>
> moeten zijn... Enig idee hoe ik dat voor elkaar krijg?
>

Wat een moeite voor zoiets simpels. Waar de target staat boeit voor geen
meter en de link si te herkennen aan een 'href='. Dus met een simpele
string replace kan je een target in de a plakken:

$tekst[1] = str_replace('href=','target="_blank" href=',$tekst[1]);

Geen regexp voor nodig.

BTW Marcus AFAIK ereg is niet PCRE compliant, preg wel :)

--

Daniel Tryba

[ Martin ]
30/05/03, 14:50
Daniel Tryba bracht mij tot de volgende reactie:
>> Je ziet dat de link van een nieuwsitem nu
>>
>> <a
>>
href="/http://nu.nl/novum//article.phtml?url=sport/infostrada.05-22-2003.003
>> 8.xml">Krajicek niet naar Roland Garros</a>
>>
>> wordt, dan zou dus
>>
>> <a
>>
href=http://nu.nl/novum//article.phtml?url=sport/infostrada.05-22-2003.0038.
>> xml target="_blank">Krajicek niet naar Roland Garros</a>
>>
>> moeten zijn... Enig idee hoe ik dat voor elkaar krijg?
>>
>
> Wat een moeite voor zoiets simpels. Waar de target staat boeit voor
> geen meter en de link si te herkennen aan een 'href='. Dus met een
> simpele
> string replace kan je een target in de a plakken:
>
> $tekst[1] = str_replace('href=','target="_blank" href=',$tekst[1]);
>
> Geen regexp voor nodig.
>
> BTW Marcus AFAIK ereg is niet PCRE compliant, preg wel :)

Hartstikke bedankt Daniel, het werkt nu naar wens :-).
Maar ook Mark natuurlijk bedankt voor de moeite. Echt toppie :-) :-)

--
Vriendelijke groeten,
Martin Reedijk

-------------------------------------------------------------
Converteren tussen Audio CD, MP3, mp3PRO, WMA, etc.
Zie www.WinampNederlands.nl > Muziek >> Converteren

Marcus
30/05/03, 15:20
Ronald Klip wrote:
> "[ Martin ]" <[ Martin ] @www.WinampNederlands.nl> schreef:
>>>> <?php
>>>> $adres = "http://nu.nl/deeplink_html/";
>>>> $begin = "<b>Sport</b>";
>>>> $eind = "<b>Net</b>";
>>>> $openen = fopen("$adres", "r");
>>>> $lezen = fread($openen, 200000);
>>>> $data = eregi("$begin(.*)$eind", $lezen, $tekst);
>>>> fclose($openen);
>>>> $tekst[1] = str_replace
>>>> ("/novum/","http://nu.nl/novum/",$tekst[1]); echo $tekst[1];
>>
>>>> Wat moet ik toevoegen om de links in een nieuw venster te laten
>>>> openen?
>>
>>> Het kan eventueel met een target :) (of een base href)
>>
>> Ja, dat begrijp ik (target="_blank"). Maar waar plaats ik dat in de
>> code?
>
> fclose($openen);
> $tekst[1] = str_replace ("/novum/","http://nu.nl/novum/",$tekst[1]);
> $tekst[1] = str_replace ("</a>", "target='_blank'</a>", $tekst[1]);
> echo $tekst[1];

Dan krijg je <a>...target='_blank'</a> en dat werkt dus niet...

Mark

Marcus
30/05/03, 15:35
Daniel Tryba wrote:
> [ Martin ] <[ Martin ] @www.winampnederlands.nl> wrote:
>> Je ziet dat de link van een nieuwsitem nu
>>
>> <a
>>
href="/http://nu.nl/novum//article.phtml?url=sport/infostrada.05-22-2003
..003
>> 8.xml">Krajicek niet naar Roland Garros</a>
>>
>> wordt, dan zou dus
>>
>> <a
>>
href=http://nu.nl/novum//article.phtml?url=sport/infostrada.05-22-2003.0
038.
>> xml target="_blank">Krajicek niet naar Roland Garros</a>
>>
>> moeten zijn... Enig idee hoe ik dat voor elkaar krijg?
>>
>
> Wat een moeite voor zoiets simpels. Waar de target staat boeit voor
> geen meter en de link si te herkennen aan een 'href='. Dus met een
> simpele
> string replace kan je een target in de a plakken:
>
> $tekst[1] = str_replace('href=','target="_blank" href=',$tekst[1]);
>
> Geen regexp voor nodig.
>
> BTW Marcus AFAIK ereg is niet PCRE compliant, preg wel :)

Ik ben niet zo thuis in php, akelige taal.... waarom werkt s/../../g
niet gewoon :(

Mark

Daniel Tryba
30/05/03, 15:50
Marcus <doei@bannerswapnl.com> wrote:
>> Wat een moeite voor zoiets simpels. Waar de target staat boeit voor
>> geen meter en de link si te herkennen aan een 'href='. Dus met een
>> simpele
>> string replace kan je een target in de a plakken:
>>
>> $tekst[1] = str_replace('href=','target="_blank" href=',$tekst[1]);
>>
>> Geen regexp voor nodig.
>>
>> BTW Marcus AFAIK ereg is niet PCRE compliant, preg wel :)
>
> Ik ben niet zo thuis in php, akelige taal.... waarom werkt s/../../g
> niet gewoon :(

Ongeacht of je nu wel of niet thuis bent in een taal (in dit geval PHP),
een regexp voor deze oplossing is niet de goede. Ook in perl is het
zonde om voor het invoegen van een string op een heel herkenbare plek
zonder een verdere manipulatie een regexp te gebruiken. Maar als je al
zo graag een regexp gebruikt had je natuurlijk gewoon
s/href/target='_blank' href/g kunnen gebruiken (wat zich in php vertaalt
naar preg_replace('/href/','target="_blank" href',$str)) zonder enige
backreference.

--

Daniel Tryba

robert
30/05/03, 16:20
NNTP-Posting-Host: cust.91.90.adsl.cistron.nl
X-Trace: ncc1701.cistron.net 1054304078 21714 195.64.91.90 (30 May 2003 14:14:38 GMT)
X-Complaints-To: abuse@cistron.nl
NNTP-Posting-Date: Fri, 30 May 2003 14:14:38 +0000 (UTC)
User-Agent: slrn/0.9.7.4 (Darwin)
Xref: nl-news.euro.net nl.internet.www.server-side:29673

Daniel Tryba <news_nl.internet.www.server-side@canopus.nl>:
> Ook in perl is het zonde om voor het invoegen van een string op een heel
> herkenbare plek zonder een verdere manipulatie een regexp te gebruiken.

Dat is pas merkbaar als je honderdduizenden toevoegingen gaat doen (op mijn
machine haal ik 170000 regex-'inserts' per seconde), en de code om het met
regular expressions te doen is IMO leesbaarder:

$str =~ s/href=/target=_blank href=/;
vs
substr($str, index($str, "href="), 0) = "target=_blank ";

--
robert

Daniel Tryba
30/05/03, 18:05
robert <{n.i.w.s}@allyourbass.org.invalid> wrote:
> > Ook in perl is het zonde om voor het invoegen van een string op een heel
> > herkenbare plek zonder een verdere manipulatie een regexp te gebruiken.
>
> Dat is pas merkbaar als je honderdduizenden toevoegingen gaat doen (op mijn
> machine haal ik 170000 regex-'inserts' per seconde), en de code om het met
> regular expressions te doen is IMO leesbaarder:

Dat het in perl niet veel uitmaakt dat is leuk voor perl (de keren dat
ik perl gebruik maak ik daar dankbaar gebruik van). Maar in php zou de
impact val een [ep]reg tov een str_replace wel eens groot kunnen zijn
(niet getest overigens). En wat indien het taaltje wat je gebruikt
helemaal geen regexp bevat?

Leesbaarheid: dan moet je natuurlijk wel al regexpen kunnen lezen, namen
als substr,index en str_replace spreken ook wel voorzich.

--

Daniel Tryba

Marcus
30/05/03, 19:20
Daniel Tryba wrote:
> robert <{n.i.w.s}@allyourbass.org.invalid> wrote:
>>> Ook in perl is het zonde om voor het invoegen van een string op een
>>> heel herkenbare plek zonder een verdere manipulatie een regexp te
>>> gebruiken.
>>
>> Dat is pas merkbaar als je honderdduizenden toevoegingen gaat doen
>> (op mijn machine haal ik 170000 regex-'inserts' per seconde), en de
>> code om het met regular expressions te doen is IMO leesbaarder:
>
> Dat het in perl niet veel uitmaakt dat is leuk voor perl (de keren dat
> ik perl gebruik maak ik daar dankbaar gebruik van). Maar in php zou de
> impact val een [ep]reg tov een str_replace wel eens groot kunnen zijn
> (niet getest overigens). En wat indien het taaltje wat je gebruikt
> helemaal geen regexp bevat?

zelfs js en vbscript hebben regexes... Als de impact bij php
daadwerkelijk groot is dan is het natuurlijk gewoon pruts
geprogrammeerd...

> Leesbaarheid: dan moet je natuurlijk wel al regexpen kunnen lezen,
> namen
> als substr,index en str_replace spreken ook wel voorzich.

Maar dat je een waarde aan een substring toe kan wijzen spreekt IMHO
niet voor zich.




Mark

robert
30/05/03, 20:05
Daniel Tryba <news_nl.internet.www.server-side@canopus.nl>:
> robert <{n.i.w.s}@allyourbass.org.invalid> wrote:
>> > Ook in perl is het zonde om voor het invoegen van een string op een
>> > heel herkenbare plek zonder een verdere manipulatie een regexp te
>> > gebruiken.
>>
>> Dat is pas merkbaar als je honderdduizenden toevoegingen gaat doen (op
>> mijn machine haal ik 170000 regex-'inserts' per seconde), en de code om
>> het met regular expressions te doen is IMO leesbaarder:
>
> Dat het in perl niet veel uitmaakt dat is leuk voor perl (de keren dat
> ik perl gebruik maak ik daar dankbaar gebruik van). Maar in php zou
> de impact val een [ep]reg tov een str_replace wel eens groot kunnen
> zijn (niet getest overigens). En wat indien het taaltje wat je gebruikt
> helemaal geen regexp bevat?

Dan moet je iets anders verzinnen, maar ik ga echt niet stoppen met het
gebruiken van RE's in Perl omdat ze in PHP misschien traag zijn, of in
Brainf*ck niet bestaan.

> Leesbaarheid: dan moet je natuurlijk wel al regexpen kunnen lezen, namen
> als substr,index en str_replace spreken ook wel voorzich.

Een 'insert string here' regular expression is nou niet echt het toonbeeld
van complexe code; afgezien van de syntax van het uitvoeren van een regex
(s///) is het prima leesbaar lijkt me.

--
robert

robert
30/05/03, 20:20
Marcus <doei@bannerswapnl.com>:
> Daniel Tryba wrote:
>> Maar in php zou de impact val een [ep]reg tov een str_replace wel eens
>> groot kunnen zijn (niet getest overigens).
>
> zelfs js en vbscript hebben regexes... Als de impact bij php
> daadwerkelijk groot is dan is het natuurlijk gewoon pruts
> geprogrammeerd...

De Wijze Heren des PHP's hebben ooit besloten dat het niet nuttig is
een regular expression eenmalig te compileren om 'em daarna te kunnen
hergebruiken; in een loop van 1 mio [ep]reg_replace's wordt AFAIK dezelfde
RE dus eerst 1 mio keer gecompileerd en daarna gebruikt, om aan het einde
van de loop weer weggemikt te worden.

En tja, dan wil ik wel geloven dat het (in grote hoeveelheden) traag wordt.

Maar ja, Daar Is PHP Natuurlijk Niet Voor Bedoeld (tm) ;)

>> Leesbaarheid: dan moet je natuurlijk wel al regexpen kunnen lezen,
>> namen als substr,index en str_replace spreken ook wel voorzich.
>
> Maar dat je een waarde aan een substring toe kan wijzen spreekt IMHO
> niet voor zich.

Daar had ik nog niet eens over nagedacht :)

--
robert

Ronald Klip
31/05/03, 01:35
Marcus schreef:
> Ronald Klip wrote:

[knip]

> Dan krijg je <a>...target='_blank'</a> en dat werkt dus niet...

Gddmm, ik dacht dat ik het bericht gecanceld had...

--
groet, Ronald

Daniel Tryba
31/05/03, 03:20
robert <{n.i.w.s}@allyourbass.org.invalid> wrote:
> > Dat het in perl niet veel uitmaakt dat is leuk voor perl (de keren dat
> > ik perl gebruik maak ik daar dankbaar gebruik van). Maar in php zou
> > de impact val een [ep]reg tov een str_replace wel eens groot kunnen
> > zijn (niet getest overigens). En wat indien het taaltje wat je gebruikt
> > helemaal geen regexp bevat?
>
> Dan moet je iets anders verzinnen, maar ik ga echt niet stoppen met het
> gebruiken van RE's in Perl omdat ze in PHP misschien traag zijn, of in
> Brainf*ck niet bestaan.

Ik zeg alleen maar dat er in andere talen in vele gevallen een simpelere
(en snellere) oplossing is dan het gebruik van regexps.

> > Leesbaarheid: dan moet je natuurlijk wel al regexpen kunnen lezen, namen
> > als substr,index en str_replace spreken ook wel voorzich.
>
> Een 'insert string here' regular expression is nou niet echt het toonbeeld
> van complexe code; afgezien van de syntax van het uitvoeren van een regex
> (s///) is het prima leesbaar lijkt me.

_Als_ je uberhaupt al weet wat een RE is. een ~= operator gevolgt door
s/foo/bar/g is voor de leek vaag.

--

Daniel Tryba

Daniel Tryba
31/05/03, 03:35
robert <{n.i.w.s}@allyourbass.org.invalid> wrote:
> >> Maar in php zou de impact val een [ep]reg tov een str_replace wel eens
> >> groot kunnen zijn (niet getest overigens).
> >
> > zelfs js

Ook "pas" sinds 1.3 (ECMA).

> > en vbscript

Vanaf versie 5.

> > hebben regexes...

> > Als de impact bij php daadwerkelijk groot is dan is het natuurlijk
> > gewoon pruts geprogrammeerd...

En dus een zeer zinnige reden om ze te vermijden.

> De Wijze Heren des PHP's hebben ooit besloten dat het niet nuttig is
> een regular expression eenmalig te compileren om 'em daarna te kunnen
> hergebruiken; in een loop van 1 mio [ep]reg_replace's wordt AFAIK dezelfde
> RE dus eerst 1 mio keer gecompileerd en daarna gebruikt, om aan het einde
> van de loop weer weggemikt te worden.
>
> En tja, dan wil ik wel geloven dat het (in grote hoeveelheden) traag wordt.

Dat geldt voor zowel ereg als preg? Ik zou immers van preg* enige
intelligentie verwachten omdat deze uit een externe lib gelinkt wordt.

> Maar ja, Daar Is PHP Natuurlijk Niet Voor Bedoeld (tm) ;)

PHP is echt niet de enige taal die het zo aanpakt, bv in het pre Java
1.4 tijdperk was je afhankelijk van externe RE implementaties, en in 1
van de populaire (apache.regexp) mocht je ook zelf een pattern compilen
voor later hergebruik indien je het vermoeden had dat het wel eens vaker
gebruikt zou kunnen worden. Dat perl geweldig en perfect is weet
iedereen nu wel, maar als je dan advies geeft in een mindere taal hou
dan wel even rekening met de gebrekken.

--

Daniel Tryba

robert
31/05/03, 08:50
Daniel Tryba <news_nl.internet.www.server-side@canopus.nl>:
> robert <{n.i.w.s}@allyourbass.org.invalid> wrote:
> Ik zeg alleen maar dat er in andere talen in vele gevallen een simpelere
> (en snellere) oplossing is dan het gebruik van regexps.

Nee, je zei specifiek dat het ook in Perl zonde is om RE's te gebruiken :)

>> Een 'insert string here' regular expression is nou niet echt het
>> toonbeeld van complexe code; afgezien van de syntax van het uitvoeren
>> van een regex (s///) is het prima leesbaar lijkt me.
>
> _Als_ je uberhaupt al weet wat een RE is. een ~= operator gevolgt door
> s/foo/bar/g is voor de leek vaag.

Dat is een drogreden. In Perl is '=~' een veelgebruikte operator; als
iemand ('de leek') zich waagt aan de taal, dan ga ik ervan uit dat deze
persoon zich eerst verwittigt van de syntax van de taal. Anders kan je over
elke taal wel moeilijk gaan doen (zoals een bepaalde '===' operator die
uitblinkt in duidelijkheid ;).

--
robert

robert
31/05/03, 09:05
Daniel Tryba <news_nl.internet.www.server-side@canopus.nl>:
> robert <{n.i.w.s}@allyourbass.org.invalid> wrote:
>> De Wijze Heren des PHP's hebben ooit besloten dat het niet nuttig is
>> een regular expression eenmalig te compileren om 'em daarna te kunnen
>> hergebruiken; in een loop van 1 mio [ep]reg_replace's wordt AFAIK
>> dezelfde RE dus eerst 1 mio keer gecompileerd en daarna gebruikt, om
>> aan het einde van de loop weer weggemikt te worden.
>
> Dat geldt voor zowel ereg als preg? Ik zou immers van preg* enige
> intelligentie verwachten omdat deze uit een externe lib gelinkt wordt.

PCRE heeft gewoon een pcre_compile() en pcre_exec(). Het cachen van
gecompileerde RE's is niet iets wat in zo'n lib thuishoort, dat moet PHP
doen.

Maar wees gerust; ik heb de source er nog even op nageslagen, en PHP cachet
netjes gecompileerde RE's.

--
robert

Daniel Tryba
31/05/03, 15:05
robert <{n.i.w.s}@allyourbass.org.invalid> wrote:
> > Ik zeg alleen maar dat er in andere talen in vele gevallen een simpelere
> > (en snellere) oplossing is dan het gebruik van regexps.
>
> Nee, je zei specifiek dat het ook in Perl zonde is om RE's te gebruiken :)

Tsja, maar dat is het ook indien het onnodig gebeurd, immers volgens je
eigen benchmark is de RE trager dan de string replace variant :)

> > _Als_ je uberhaupt al weet wat een RE is. een ~= operator gevolgt door
> > s/foo/bar/g is voor de leek vaag.
>
> Dat is een drogreden. In Perl is '=~' een veelgebruikte operator; als
> iemand ('de leek') zich waagt aan de taal, dan ga ik ervan uit dat deze
> persoon zich eerst verwittigt van de syntax van de taal. Anders kan je over
> elke taal wel moeilijk gaan doen (zoals een bepaalde '===' operator die
> uitblinkt in duidelijkheid ;).

=== is in 1 regel uit te legen (verglijking inclusief type), waar
regexps toch al heel wat regeltjes worden. De ruimte die je overhoud op
het A4tje voor andere leuke spulletjes is dus al significant minder :)

--

Daniel Tryba

Daniel Tryba
31/05/03, 15:05
robert <{n.i.w.s}@allyourbass.org.invalid> wrote:
> > Dat geldt voor zowel ereg als preg? Ik zou immers van preg* enige
> > intelligentie verwachten omdat deze uit een externe lib gelinkt wordt.
>
> PCRE heeft gewoon een pcre_compile() en pcre_exec(). Het cachen van
> gecompileerde RE's is niet iets wat in zo'n lib thuishoort, dat moet PHP
> doen.
>
> Maar wees gerust; ik heb de source er nog even op nageslagen, en PHP cachet
> netjes gecompileerde RE's.

Dan kan ik nu weer met een gerust hart verder slapen :)

--

Daniel Tryba

Marcus
31/05/03, 15:05
Daniel Tryba wrote:
> robert <{n.i.w.s}@allyourbass.org.invalid> wrote:
>>> Ik zeg alleen maar dat er in andere talen in vele gevallen een
>>> simpelere (en snellere) oplossing is dan het gebruik van regexps.
>>
>> Nee, je zei specifiek dat het ook in Perl zonde is om RE's te
>> gebruiken :)
>
> Tsja, maar dat is het ook indien het onnodig gebeurd, immers volgens
> je eigen benchmark is de RE trager dan de string replace variant :)

annemende dat je doelt op:

======
Dat is pas merkbaar als je honderdduizenden toevoegingen gaat doen (op
mijn
machine haal ik 170000 regex-'inserts' per seconde), en de code om het
met
regular expressions te doen is IMO leesbaarder:

$str =~ s/href=/target=_blank href=/;
vs
substr($str, index($str, "href="), 0) = "target=_blank ";
======

Die vegelijking is mogelijk niet helemaal eerlijk, een betere
vergelijking lijkt mij:

$str =~ s/(href=)/target=_blank \1/;
vs
substr($str, index($str, "href="), 0) = "target=_blank ";

Hoewel ik niet weet of het ook sneller is. Bovendien zijn zulke kleine
verschillen zo onbeduidend, dat als ze voor je project uitmaken dat je
wellicht beter in C of assembly kan gaan programmeren...

Mark

robert
31/05/03, 15:20
Daniel Tryba <news_nl.internet.www.server-side@canopus.nl>:
> robert <{n.i.w.s}@allyourbass.org.invalid> wrote:
>> > Ik zeg alleen maar dat er in andere talen in vele gevallen een
>> > simpelere (en snellere) oplossing is dan het gebruik van regexps.
>>
>> Nee, je zei specifiek dat het ook in Perl zonde is om RE's te gebruiken
>> :)
>
> Tsja, maar dat is het ook indien het onnodig gebeurd, immers volgens je
> eigen benchmark is de RE trager dan de string replace variant :)

Definieer 'onnodig'. Als ik twee keer een RE gebruik, in plaats van een
string replace, in m'n hele programma dat merk jij het verschil echt niet
(je praat over microseconden).

Maar als jij kennelijk het onderste uit de kan wilt halen, waarom gebruik
je dan uberhaupt PHP?

>> > _Als_ je uberhaupt al weet wat een RE is. een ~= operator gevolgt
>> > door s/foo/bar/g is voor de leek vaag.
>>
>> Dat is een drogreden. In Perl is '=~' een veelgebruikte operator; als
>> iemand ('de leek') zich waagt aan de taal, dan ga ik ervan uit dat
>> deze persoon zich eerst verwittigt van de syntax van de taal. Anders
>> kan je over elke taal wel moeilijk gaan doen (zoals een bepaalde '==='
>> operator die uitblinkt in duidelijkheid ;).
>
>=== is in 1 regel uit te legen (verglijking inclusief type), waar regexps
>toch al heel wat regeltjes worden.

Het kennisniveau van iemand die de operators van een taal niet kan lezen is
over het algemeen anders dan het niveau van iemand die (complexe) RE's niet
begrijpt; jij haalt ze door elkaar.

Ik kan in 1 regel uitleggen wat de =~ operator doet (zoeken/substitueren
in, of transleren van, een scalar variabele). Heeft vooralsnog geen
helemaal niks met RE's van doen.

--
robert

robert
31/05/03, 15:20
Marcus <doei@bannerswapnl.com>:
> Die vegelijking is mogelijk niet helemaal eerlijk, een betere
> vergelijking lijkt mij:
>
> $str =~ s/(href=)/target=_blank \1/;

Dan liever:
$str =~ s/href=/target=_blank $&/;

Maar alhoewel het functioneel gezien misschien meer in de buurt komt van de
methode hieronder, vind ik 'em niet beter. Omdat de replace plaatsvindt op
een statische string mag je wat mij betreft die string ook gewoon aan de
RHS gebruiken.

Case-sensitivity telt niet mee, want daar wordt hieronder ook niet op gelet
(anders moet de index() een lc() bevatten, en dan is het nog maar de vraag
of 'ie sneller is).

> substr($str, index($str, "href="), 0) = "target=_blank ";
>
> Hoewel ik niet weet of het ook sneller is.

Dat is 'ie niet; backreferences zijn vaak wat duurder.

--
robert

Daniel Tryba
01/06/03, 22:20
robert <{n.i.w.s}@allyourbass.org.invalid> wrote:
> > Tsja, maar dat is het ook indien het onnodig gebeurd, immers volgens je
> > eigen benchmark is de RE trager dan de string replace variant :)
>
> Definieer 'onnodig'. Als ik twee keer een RE gebruik, in plaats van een
> string replace, in m'n hele programma dat merk jij het verschil echt niet
> (je praat over microseconden).

Tsja, maar waarom moet ik opeens denken aan die geweldig MS reclame voor
hun nieuwe OS?

> Maar als jij kennelijk het onderste uit de kan wilt halen, waarom gebruik
> je dan uberhaupt PHP?

Waarom denk je dat _ik_ PHP gebruik? De enige plekken waar ik PHP
gebruik zijn of legacy apps waarvoor ik nog geen behoefte heb gehad om
deze te vervangen, of een project waar al voor PHP gekozen was voor dat
ik uberhaupt bij het project betrokken was.

> >=== is in 1 regel uit te legen (verglijking inclusief type), waar regexps
> >toch al heel wat regeltjes worden.
>
> Het kennisniveau van iemand die de operators van een taal niet kan lezen is
> over het algemeen anders dan het niveau van iemand die (complexe) RE's niet
> begrijpt; jij haalt ze door elkaar.

Ik kan dan concluderen dat ik geen idee heb wat =~ doet.

> Ik kan in 1 regel uitleggen wat de =~ operator doet (zoeken/substitueren
> in, of transleren van, een scalar variabele). Heeft vooralsnog geen
> helemaal niks met RE's van doen.

Nu heb ik nog altijd geen idee wat =~ doet.

--

Daniel Tryba

Daniel Tryba
01/06/03, 22:35
Marcus <doei@bannerswapnl.com> wrote:
> $str =~ s/href=/target=_blank href=/;
> vs
> substr($str, index($str, "href="), 0) = "target=_blank ";
> ======
>
> Die vegelijking is mogelijk niet helemaal eerlijk, een betere
> vergelijking lijkt mij:
>
> $str =~ s/(href=)/target=_blank \1/;

Waarom is dit een betere verglijking?

> vs
> substr($str, index($str, "href="), 0) = "target=_blank ";

Weer een geweldig voorbeeld van perl. substr doet meer dan je denkt :)

> Hoewel ik niet weet of het ook sneller is.

Een backreference maakt een regexp sneller?

> Bovendien zijn zulke kleine verschillen zo onbeduidend, dat als ze
> voor je project uitmaken dat je wellicht beter in C of assembly kan
> gaan programmeren...

Beide zijn niet portable en de winst die je haalt in snelheid moet je
zien op te wegen tegen een langere ontwikkeltijd en extra debugtijd.

--

Daniel Tryba

robert
01/06/03, 23:05
Daniel Tryba <news_nl.internet.www.server-side@canopus.nl>:
> robert <{n.i.w.s}@allyourbass.org.invalid> wrote:
>> Maar als jij kennelijk het onderste uit de kan wilt halen, waarom
>> gebruik je dan uberhaupt PHP?
>
> Waarom denk je dat _ik_ PHP gebruik? De enige plekken waar ik PHP
> gebruik zijn of legacy apps waarvoor ik nog geen behoefte heb gehad om
> deze te vervangen, of een project waar al voor PHP gekozen was voor dat
> ik uberhaupt bij het project betrokken was.

Anders had je natuurlijk veel liever gekozen voor Perl...

>> Ik kan in 1 regel uitleggen wat de =~ operator doet
>> (zoeken/substitueren in, of transleren van, een scalar
>> variabele). Heeft vooralsnog geen helemaal niks met RE's van doen.
>
> Nu heb ik nog altijd geen idee wat =~ doet.

....alhoewel, misschien is het een beetje te hoog gegrepen ;)

--
robert

robert
01/06/03, 23:20
Daniel Tryba <news_nl.internet.www.server-side@canopus.nl>:
> Marcus <doei@bannerswapnl.com> wrote:
>> Die vegelijking is mogelijk niet helemaal eerlijk, een betere
>> vergelijking lijkt mij:
>> $str =~ s/(href=)/target=_blank \1/;
> Waarom is dit een betere verglijking?

Omdat het functioneel gezien beter bij de substr()-methode past. Wat nóg
beter past is:

$str =~ m/href=/g;
substr($str, pos $str, 0) = "target=_blank ";

Maar dat is wat mij betreft niet een erg mooie methode.

--
robert

robert
01/06/03, 23:35
robert <{n.i.w.s}@allyourbass.org.invalid>:
> Omdat het functioneel gezien beter bij de substr()-methode past. Wat nóg
> beter past is:
>
> $str =~ m/href=/g;
> substr($str, pos $str, 0) = "target=_blank ";
>
> Maar dat is wat mij betreft niet een erg mooie methode.

Nah, final offer:

$str =~ s/(?=href=)/target=_blank /;

--
robert

Daniel Tryba
02/06/03, 07:50
robert <{n.i.w.s}@allyourbass.org.invalid> wrote:
> >> Maar als jij kennelijk het onderste uit de kan wilt halen, waarom
> >> gebruik je dan uberhaupt PHP?
> >
> > Waarom denk je dat _ik_ PHP gebruik? De enige plekken waar ik PHP
> > gebruik zijn of legacy apps waarvoor ik nog geen behoefte heb gehad om
> > deze te vervangen, of een project waar al voor PHP gekozen was voor dat
> > ik uberhaupt bij het project betrokken was.
>
> Anders had je natuurlijk veel liever gekozen voor Perl...

Met een aan zekerheid grenzende waarschijnlijkheid kan ik daar
ontkennenend op antwoorden.

> >> Ik kan in 1 regel uitleggen wat de =~ operator doet
> >> (zoeken/substitueren in, of transleren van, een scalar
> >> variabele). Heeft vooralsnog geen helemaal niks met RE's van doen.
> >
> > Nu heb ik nog altijd geen idee wat =~ doet.
>
> ...alhoewel, misschien is het een beetje te hoog gegrepen ;)

Tsja, 1 operator die op z'n minst 3 verschillende functies kan hebben
(dat wordt wel een heel lange 1 regelige uitleg), substr wat naast het
retouneren van een substr ook substitutesubstr kan betekenen. Sommige
zullen dat als kracht bestempelen, maar ik zie het zelf als
onduidelijk.

--

Daniel Tryba

robert
02/06/03, 08:35
NNTP-Posting-Host: cust.91.90.adsl.cistron.nl
X-Trace: ncc1701.cistron.net 1054535043 24222 195.64.91.90 (2 Jun 2003 06:24:03 GMT)
X-Complaints-To: abuse@cistron.nl
NNTP-Posting-Date: Mon, 2 Jun 2003 06:24:03 +0000 (UTC)
User-Agent: slrn/0.9.7.4 (Darwin)
Xref: nl-news.euro.net nl.internet.www.server-side:29735

Daniel Tryba <news_nl.internet.www.server-side@canopus.nl>:
> robert <{n.i.w.s}@allyourbass.org.invalid> wrote:
> [Perl]
> Tsja, 1 operator die op z'n minst 3 verschillende functies kan hebben
> (dat wordt wel een heel lange 1 regelige uitleg), substr wat naast het
> retouneren van een substr ook substitutesubstr kan betekenen. Sommige
> zullen dat als kracht bestempelen, maar ik zie het zelf als onduidelijk.

Ik meer als 'logisch'. Overigens heb ik nog een variant gevonden:

substr($str, index($str, "href="), 0, "target=_blank ");

Perl rules ;)

--
robert