Problem med preg_replace

PHPportalen Forum Index » PHP Mjukstart
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
PappaJ



Medlem i: 921 dagar
Från: Sthlm
Status: Offline



#741330
Inlägg Skrivet: 2017-01-11 17:06      Ämne: Problem med preg_replace Citera

Hej!

Jag har en string som ser ut så här: 4 stycken hyllor (blåa och 70 breda)

Nu skulle jag vilja göra om den så att resultatet blir: 4 stycken hyllor

Det vill säga att det som ligger mellan paranteserna samt paranteserna ska bort.
Sträning ligger i $fileArr

Så här ser mitt försök ut: ". $fileArr[$j] = preg_replace('(*?)', '', $fileArr[$j]) ."

Det ska senare bli en del av en hyperlänk.

Tacksam för svar!

Allt gott!
//Jerry
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
harald_b
Moderator



Medlem i: 3994 dagar
Från: Tavesta
Status: Offline



#741332
Inlägg Skrivet: 2017-01-11 22:53      Ämne: Citera

Reguljara uttryck skall alltid inledas och avslutas med en avgränsare. Man kan välja vilket tecken som hellst, men normalt används snedstreck (/), eller kanske brädgård (#).
KOD:
1:
/uttryck/

Parentes är ett specialtecken i reguljära uttryck, så parentestecken måste escapeas:
KOD:
1:
/\(uttryck_inom_parentes\)/

Vill du matcha vilket tecken som hellst använder du punkt (.).
Vill du matcha hur många som hellst av ett visst tecken eller uttryck använder du asterisk (*) efter.
KOD:
1:
/\(.*\)/
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
PappaJ



Medlem i: 921 dagar
Från: Sthlm
Status: Offline



#741334
Inlägg Skrivet: 2017-01-12 00:44      Ämne: Citera

Hej Harald_b

Tack för att du hjälper mig!

Jag har testat att ändra men det fungerar inte, får felmeddelande.
Så här ser hela raden ut:
echo "<a target='_blank' href='http://www.imdb.com/find?ref_=nv_sr_fn&q=". $fileArr[$j] = preg_replace('\(*?\)', '', $fileArr[$j]) ."&s=tt'><font size='2'>" . $fileArr[$j] . "</font></a><br>";

Felmeddelande lyder följande:
Warning: preg_replace(): Delimiter must not be alphanumeric or backslash in C:\Abyss Web Server\htdocs\filmer.php on line 65
11-11-11 (2011 DVDRip SWESUB)

$fileArr är ett mappnamn på servern.


Allt gott!
Jerry
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
harald_b
Moderator



Medlem i: 3994 dagar
Från: Tavesta
Status: Offline



#741335
Inlägg Skrivet: 2017-01-12 13:25      Ämne: Citera

Det var lite fler saker än backslash framför parenteserna som du behövde ändra:
1) Avgränsare i början och slutet av uttrycket
2) Backslash före icke-alfanumeriska tecken som skall matchas, vilket du också fixat.
3) *? matchar inte vilken text som hellst i dessa reguljära uttryck. Här måste du använda .* istället.

Sedan är det lite andra saker som behöver escapeas på olika sätt, för att din kod inte skall balla ur.
När du stoppar in strängdata i en url skall normalt rawurlencode användas.
&-tecken i html-kod måste skrivas ut som &amp;
I ditt fall:
PHP:
1:
 echo "<a target='_blank' href='http://www.imdb.com/find?ref_=nv_sr_fn&amp;q=".rawurlencode($fileArr[$j] = preg_replace('fixme'''$fileArr[$j]))."&amp;s=tt'>" ... 


När du stoppar in strängdata i html-koden behöver det normalt escapeas med hjälp av htmlspecialchars:
PHP:
1:
 ... "<font size='2'>" htmlspecialchars($fileArr[$j]) . "</font></a><br>"
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
PappaJ



Medlem i: 921 dagar
Från: Sthlm
Status: Offline



#741364
Inlägg Skrivet: 2017-01-14 17:18      Ämne: Citera

Hej Harald_b

Har nu fixat och trixat under några kvällar och fick tillslut till det tack vare dig, stort tack!

Så här ser koden ut när den fungerar:

KOD:
1:
 
2:
   $imdbArr[$j] = $fileArr[$j];
3:
 
4:
   echo "<a target='_blank' href='http://www.imdb.com/find?ref_=nv_sr_fn&q=".rawurlencode($fileArr[$j] = preg_replace('/ (\(.*\))\.*/', '', utf8_encode($fileArr[$j])))."&s=tt'><font size='2'>" . $imdbArr[$j] . "</font></a><br>";
5:
 
6:
 


Men i går kväll blev det fel men jag har inte ändrarnågot i filerna Crying or Very sad

Nu får jag felmeddelande:
Warning: opendir(\\RT-AC66U\__Filmer,\\RT-AC66U\__Filmer): in C:\Abyss Web Server\htdocs\filmer.php on line 14

Warning: opendir(\\RT-AC66U\__Filmer): failed to open dir: No error in C:\Abyss Web Server\htdocs\filmer.php on line 14

Warning: readdir() expects parameter 1 to be resource, boolean given in C:\Abyss Web Server\htdocs\filmer.php on line 28

Jag har startat om, installerat om webservern och omelstallerat php 5 efter med det hjälpte inte. Men det är ett annat problem Smile

Tack igen Harald_b för hjälpen!

//Jerry
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
harald_b
Moderator



Medlem i: 3994 dagar
Från: Tavesta
Status: Offline



#741366
Inlägg Skrivet: 2017-01-14 19:32      Ämne: Citera

Det ser ut som du har fått in ett felaktigt mappnamn när du kör opendir() på rad 14 i filmer.php.
Om du tillfälligt testar att byta ut opendir mot var_dump så kommer den spotta ur sig exakt vad opendir får som parametrar.
På ditt första felmeddelande ser det ut som mappnamnet angivits två gånger.

Annars kan du också börja med att kolla om \\RT-AC66U\__Filmer är ett korrekt mappnamn på din dator.

Sedan kan det vara bra att fundera lite över varifrån datat kommer. Du bör inte stoppa in något data i opendir som du inte har väldigt bra kontroll över.

Felet med readdir på rad 28 i filmer.php kommer antagligen lösa sig av sig självt när du löst problemet med opendir på rad 14.
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
PappaJ



Medlem i: 921 dagar
Från: Sthlm
Status: Offline



#741369
Inlägg Skrivet: 2017-01-15 13:19      Ämne: Citera

Hej Harald,

Nu har jag löst det Smile

Jag googlade och läst en massa och det visade sig att det var rättigheterna mot den mappen på servern som jag var tvungen att ordna. Det gjorde jag på följande sätt:

KOD:
1:
 
2:
$letter = "M";
3:
$location = "\\\\servernamn\mappnamn";
4:
$user = "anv-namn";
5:
$pass = "lösenord";
6:
 
7:
system("net use " . $letter . ": \"".$location."\" ".$pass." /user:".$user." /persistent:no>nul 2>&1");


Jag la in koden i min header.php så att den alltid finns med.

Nu fungerar det klockrent! Tack för all hjälp!

//Jerry
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » PHP Mjukstart
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic