Registreer FAQ Berichten van vandaag


Ga terug   Scholieren.com forum / Technologie / Software & Hardware
Reageren
 
Topictools Zoek in deze topic
Oud 03-06-2003, 15:29
Preaper
Avatar van Preaper
Preaper is offline
Hoi mensen, ik heb de volgende code geschreven om de url in een meta redirect tag te kunnen wijzigen:
Code:
	// URL met http:// converteren
	$line = eregi_replace("(http-equiv=[\"']?refresh[\"']?.*content=[\"']?.*)( url=http://)(.*[\"' ]{1}.*)", "\\1\\2preaper.homelinux.com/proxy/surf.php?url=http://\\3", $line);
	// URL zonder http:// converteren
	$line = eregi_replace("(http-equiv=[\"']?refresh[\"']?.*content=[\"']?.*)( url=)(http://){0}(.*[\"]{1}.*)", "\\1\\2http://preaper.homelinux.com/proxy/surf.php?url=http://".eregi("([/]?.*)$",$url)."\\4", $line);
	echo $line;
Nu wou ik graag bij de 2e eregi_replace dat er geen "http://" de string mag voorkomen. Ik heb het geprobeerd met "(http://){0}" (zoals je hierboven kunt zien) maar dat werkt niet. Hoe moet het anders?
Als je nog anderen op of aanmerkingen hebt aan mijn regex, zijn die ook welkom . Het is de eerste keer dat ik ermee werk .
__________________
█████████████████████99%
Met citaat reageren
Advertentie
Oud 03-06-2003, 15:40
deathz0rz
deathz0rz is offline
1. ik zou met Perl RegExps werken
2. zoekwerk op php.net:
http://nl3.php.net/manual/en/ref.regex.php
comment van regex at dan42 dot cjb dot net:
It's easy to exclude characters but excluding words with a regular expression is a bit more tricky. For parentheses there is no equivalent to the ^ for brackets. The only way I've found to exclude a string is to proceed by inverse logic: accept all the words that do NOT correspond to the string. So if you want to accept all strings except those _begining_ with "abc", you'd have to accept any string that matches one of the following:
^(ab[^c])
^(a[^b]c)
^(a[^b][^c])
^([^a]bc)
^([^a]b[^c])
^([^a][^b]c)
^([^a][^b][^c])

which, put together, gives the regex
^(ab[^c]|a[^b]c|a[^b][^c]|[^a]bc|[^a]b[^c]|[^a][^b]c|[^a][^b][^c])

Note that this won't work to detect the word "abc" anywhere in a string. You need to have some way of anchoring the inverse word match
like: ^(a[^b]|[^a]b|[^a][^b]) ;"ab" not at begining of line
or: (a[^b]|[^a]b|[^a][^b])& ;"ab" not at end of line
or: 123(a[^b]|[^a]b|[^a][^b]) ;"ab" not after "123"

I don't know why "(abc){0,0}" is an invalid synthax. It would've made all this much simpler.
__________________
Ooit. Dan.
Met citaat reageren
Oud 03-06-2003, 15:49
Preaper
Avatar van Preaper
Preaper is offline
Mja dat is dus de omweg ....
Perl ben ik ook mee bezig, maar ik vind PHP toch net iets handiger .

btw:
Als ik "url=(?!http://)" probeer(wat dus ook zou moeten werken...), geeft ie weer opeens een compile error :-/.
Citaat:
Warning: eregi_replace() [function.eregi-replace]: REG_BADRPT
En deze info komt rechtstreeks uit the manual:
Citaat:
http://www.php.net/manual/en/pcre.pattern.syntax.php

foo(?!bar)

matches any occurrence of "foo" that is not followed by
"bar".
__________________
█████████████████████99%
Met citaat reageren
Oud 03-06-2003, 15:55
deathz0rz
deathz0rz is offline
Citaat:
Preaper schreef op 03-06-2003 @ 16:49:
Perl ben ik ook mee bezig, maar ik vind PHP toch net iets handiger .
ik zeg perl RegExps, niet perl zelf: http://php.nederland.net/manual/en/ref.pcre.php
__________________
Ooit. Dan.
Met citaat reageren
Oud 03-06-2003, 15:56
Preaper
Avatar van Preaper
Preaper is offline
Oww op die manier Ja klopt.
__________________
█████████████████████99%
Met citaat reageren
Oud 03-06-2003, 18:37
Preaper
Avatar van Preaper
Preaper is offline
Weet iemand wat er mis is met deze regel?
Code:
$line = preg_replace("/url=/(\"|'|)/http:\/\/.*/(\"|'| |)", " ", $line);
hij hoort dit te kunnen vinden:

<meta http-equiv="Refresh" content="0; surf.php?URL=http://willekeurigeurldievervangenmoetworden">
__________________
█████████████████████99%
Met citaat reageren
Oud 03-06-2003, 19:07
deathz0rz
deathz0rz is offline
Citaat:
Preaper schreef op 03-06-2003 @ 19:37:
Weet iemand wat er mis is met deze regel?
Code:
$line = preg_replace("/url=/(\"|'|)/http:\/\/.*/(\"|'| |)", " ", $line);
hij hoort dit te kunnen vinden:

<meta http-equiv="Refresh" content="0; surf.php?URL=http://willekeurigeurldievervangenmoetworden">
je moet er \ voor en \i achter zetten (die \ is om perl een id te geven wat het eind is en die i is voor case-insensitive)

wat is de fout trouwens?
__________________
Ooit. Dan.
Met citaat reageren
Oud 03-06-2003, 19:25
Preaper
Avatar van Preaper
Preaper is offline
Nu heb ik:
$line = preg_replace("\ url=http:\/\/(\"|'| ||)(.*)(>|\"|')\i","url=/proxy/surf.php?url=http://$1hond$2", $line);

En krijg de melding:
Delimiter must not be alphanumeric or backslash
__________________
█████████████████████99%
Met citaat reageren
Oud 03-06-2003, 19:29
Preaper
Avatar van Preaper
Preaper is offline
$line = preg_replace("/ url=http:\/\/(\"|'| ||)(.*)(>|\"|')/i","url=/proxy/surf.php?url=http://$1hond$2", $line);
Hierbij werkt het wel, maar het doet absoluut niet wat ik wil....
Ik wil dat hij zoekt naar een: "url=http://", daarachter mag " of '. Vervolgens komt er een url (deze moet dus vervangen worden), en daarachter moet een ", ' of > staan.
__________________
█████████████████████99%
Met citaat reageren
Oud 03-06-2003, 19:32
deathz0rz
deathz0rz is offline
Citaat:
Preaper schreef op 03-06-2003 @ 20:29:
$line = preg_replace("/ url=http:\/\/(\"|'| ||)(.*)(>|\"|')/i","url=/proxy/surf.php?url=http://$1hond$2", $line);
Hierbij werkt het wel, maar het doet absoluut niet wat ik wil....
Ik wil dat hij zoekt naar een: "url=http://", daarachter mag " of '. Vervolgens komt er een url (deze moet dus vervangen worden), en daarachter moet een ", ' of > staan.
ik zou de pattern niet weten... ergens in 1 vd comments bij 1 vd functions op de PCRE-reference staat een goede uitleg...
__________________
Ooit. Dan.
Met citaat reageren
Oud 03-06-2003, 19:34
Preaper
Avatar van Preaper
Preaper is offline
Ok... dat wordt weer zoeken -_-'
__________________
█████████████████████99%
Met citaat reageren
Oud 03-06-2003, 20:42
Preaper
Avatar van Preaper
Preaper is offline
*sigh* ik kom echt niet verder
__________________
█████████████████████99%
Met citaat reageren
Oud 03-06-2003, 20:48
deathz0rz
deathz0rz is offline
Citaat:
Preaper schreef op 03-06-2003 @ 21:42:
*sigh* ik kom echt niet verder
probeer eerst eens wat anders met regexps, en dan daarna kijken of het wat beter lukt, of ga nu gamen en ga daarna verder, ontspanning kan geen kwaad
__________________
Ooit. Dan.
Met citaat reageren
Oud 03-06-2003, 21:30
Preaper
Avatar van Preaper
Preaper is offline
Ik denk dat laatste maar .
__________________
█████████████████████99%
Met citaat reageren
Advertentie
Reageren


Regels voor berichten
Je mag geen nieuwe topics starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Spring naar


Alle tijden zijn GMT +1. Het is nu 20:58.