Avatar billede diz Nybegynder
30. oktober 2003 - 11:44 Der er 20 kommentarer og
1 løsning

matche en hel sætning

Jeg har faktisk et spørgsmål kørende (http://www.eksperten.dk/spm/420252), men det er endt med at jeg kun mangler lidt hjælp til Reg.Exp:

Jeg har lavet følgende:

$str = preg_replace("/(href=\")([^http:\/\/])/i", "\\1http://192.168.0.31/\\2", $str);

Den virker fint, og tilføjer http://192.168.0.31/ foran alle relative links, og lader alle "normale" links være, så længe de indeholder http://.
Fair nok.
Problemet opstår hvis et relativt link starter med 'h'. Så virker den sgu ikke. Så vidt jeg kan se må det have noget med at [^http:\/\/] betyder "bare ikke en af følgende",

Spørgsmålet er så hvordan man laver man så en "bare ikke følgende streng"

Håber nogen kan hjælpe, da det er ved at gå mig på nerverne :(

/Sune
Avatar billede erikjacobsen Ekspert
30. oktober 2003 - 11:49 #1
[^http:\/\/] er noget vrøvl ;)

Prøv

$str = preg_replace("/(href=\")(?!http:\/\/)/i", "\\1http://192.168.0.31/\\2", $str);
Avatar billede erikjacobsen Ekspert
30. oktober 2003 - 11:51 #2
Eller en smule simplere:

$str = preg_replace('/(href=")(?!http:\/\/)/i', '\1http://192.168.0.31/', $str);
Avatar billede erikjacobsen Ekspert
30. oktober 2003 - 11:52 #3
Og lidt bedre. Tillader også href="/top.php"

$str = <<<HHHH

<a href="ajshasd.asdasd">
<a href="http://www.jubii.dk">
<a href="/top.php">


HHHH;

$str = preg_replace('/(href=")(?!http:\/\/)\/?/i', '\1http://192.168.0.31/', $str);

print "$str";
Avatar billede erikjacobsen Ekspert
30. oktober 2003 - 11:53 #4
Avatar billede diz Nybegynder
30. oktober 2003 - 11:59 #5
Det er fandme iorden. Det var lige hva jeg havde brug for.

Sidste lille detalje.

Hva nu hvis " mangler omkring links. Ved godt at det ikke er den rigtige syntax i html, men der er stråds alt nogen der gør det alligevel..

Sune
Avatar billede erikjacobsen Ekspert
30. oktober 2003 - 12:04 #6
<?

$str = <<<HHHH

<a href="ajshasd.asdasd">
<a href="http://www.jubii.dk">
<a href="/top.php">
<a href=forkert.php>


HHHH;

$str = preg_replace('/(href="?)(?!http:\/\/)\/?/i', '\1http://192.168.0.31/', $str);

print "$str";

?>


giver som resultat dette, ok?

<a href="http://192.168.0.31/ajshasd.asdasd">
<a href=http://192.168.0.31/"http://www.jubii.dk">
<a href="http://192.168.0.31/top.php">
<a href=http://192.168.0.31/forkert.php>
Avatar billede erikjacobsen Ekspert
30. oktober 2003 - 12:04 #7
nej - hovsa ... 2 secs
Avatar billede erikjacobsen Ekspert
30. oktober 2003 - 12:06 #8
<?

$str = <<<HHHH

<a href="ajshasd.asdasd">
<a href="http://www.jubii.dk">
<a href="/top.php">
<a href=forkert.php>


HHHH;

$str = preg_replace('/(href="?)(?!"?http:\/\/)\/?/i', '\1http://192.168.0.31/', $str);

print "$str";

?>


giver nu:

<a href="http://192.168.0.31/ajshasd.asdasd">
<a href="http://www.jubii.dk">
<a href="http://192.168.0.31/top.php">
<a href=http://192.168.0.31/forkert.php>
Avatar billede diz Nybegynder
30. oktober 2003 - 12:15 #9
Det er bare perfekt.

Så går jeg ud fra at:

$str = preg_replace('/(scr="?)(?!"?http:\/\/)\/?/i', '\1http://192.168.0.31/', $str);

vil gøre det samme for f.eks billeder med relative links.

Smid et svar så kan du få points...


/Sune

PS : kender du et godt sted at lære req.exp. Mens jeg har siddet og kæmpet med problemet, har jeg forsøgt at få inspiration fra forskellige artikler, men jeg syntes ikke at have fundet nogen der er rigtig gode..
Avatar billede diz Nybegynder
30. oktober 2003 - 12:29 #10
det skal self. være 'src' istedet for 'scr' :)

/Sune
Avatar billede nak-m Nybegynder
30. oktober 2003 - 12:30 #11
Avatar billede nak-m Nybegynder
30. oktober 2003 - 12:33 #12
diz: måske burde du egentlig også sætte en (?!"?www.) derind så den er mere kompatibel.
Avatar billede erikjacobsen Ekspert
30. oktober 2003 - 12:54 #13
Hvilke problemer skulle det løse, nak-m?
Avatar billede nak-m Nybegynder
30. oktober 2003 - 15:28 #14
Den syntes ikke at virke ordentligt ellers ... med hensyn til www.addresser.dk :)
Avatar billede erikjacobsen Ekspert
30. oktober 2003 - 18:11 #15
Som det står giver

<a href="www.xxxxxx.yy">

jo

<a href="http://192.168.0.31/www.xxxxxx.yy">

ganske som det skal
Avatar billede nak-m Nybegynder
31. oktober 2003 - 00:12 #16
ganske som det skal?
Avatar billede erikjacobsen Ekspert
31. oktober 2003 - 06:12 #17
Ja - den refererer til en fil på serveren med navnet "www.xxxxx.yy"
Avatar billede diz Nybegynder
31. oktober 2003 - 11:00 #18
erikjacobsen: Vil du ikke have lidt points, så jeg kan få lukket spørgsmålet?
Avatar billede erikjacobsen Ekspert
31. oktober 2003 - 11:32 #19
Joh - det havde jeg da glemt alt om ... :)
Avatar billede nak-m Nybegynder
02. november 2003 - 12:08 #20
erikjacobsen: Og hvad hvis det er en url ;) (som man jo må gå ud fra?)
Avatar billede erikjacobsen Ekspert
02. november 2003 - 12:21 #21
Hvis det er en url står der jo http:// foran. Jeg er ikke helt
sikker på hvad du spørger om?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester