Kom ihåg mig?
Home Menu

Menu


Få ut vad som står mellan

Ämnesverktyg Visningsalternativ
Oläst 2008-04-19, 16:35 #1
KarlRoos KarlRoos är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jul 2007
Inlägg: 1 416
KarlRoos KarlRoos är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jul 2007
Inlägg: 1 416
Hej,
jag har problem med följande rad:
Kod:
$page['content'] = preg_replace('%<module>(.*?)</module>%', include('./Modules/' . $1 . '/index.php'), $page['content']);
Det den ska göra är att hitta exempel. <module>login</module> och inkluderade denna i sidan på exakt samma plats som <module>login</module> stod...
Jag lyckas dock inte få ut vad som står mellan <module> och </module> till en sträng.

Följande funkar 'nästan', den skriver ut "Modul: login"
Kod:
[CODE]$page['content'] = preg_replace('%<module>(.*?)</module>%', 'Modul: $1', $page['content']);
Någon som kan hjälpa mig?
Tack på förhand!
KarlRoos är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-04-19, 21:14 #2
MMCs avatar
MMC MMC är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jan 2008
Inlägg: 560
MMC MMC är inte uppkopplad
Mycket flitig postare
MMCs avatar
 
Reg.datum: Jan 2008
Inlägg: 560
Jag tror inte include() gör det du tror att den gör. Ditt regex funkar bevisligen, eftersom det byter ut module-taggarna mot Modul: "det som står mellan taggarna".

include() inkluderar och evaluerar sitt argument när den anropas. Det betyder alltså att all kod i din inkluderade fil körs när du inkluderar den. Som jag förstår ditt inlägg vill du att den matchade strängen ska bytas ut mot innehållet i filen. Då är include() fel val. Får jag föreslå nedanstående lösning på ditt problem?
Kod:
$page['content'] = preg_replace('%<module>(.*?)</module>%', file_get_contents('./Modules/' . $1 . '/index.php'), $page['content']);
Självklart bör du lägga till riktig felkontroll i koden, men det tror jag att du vet.
MMC är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-04-19, 21:17 #3
KarlRoos KarlRoos är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jul 2007
Inlägg: 1 416
KarlRoos KarlRoos är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jul 2007
Inlägg: 1 416
Citat:
Originally posted by MMC@Apr 19 2008, 21:14
Jag tror inte include() gör det du tror att den gör.
Jo, jag kan använda variablar m.m. som finns på sidan som inkluderar modulen

Prolemet ligger inte i includen utan att jag inte kan få ut vad som står mellan <module>*</module> till en sträng.
$1 går inte att använda utanför preg_replace.
KarlRoos är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-04-19, 21:20 #4
MMCs avatar
MMC MMC är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jan 2008
Inlägg: 560
MMC MMC är inte uppkopplad
Mycket flitig postare
MMCs avatar
 
Reg.datum: Jan 2008
Inlägg: 560
Citat:
Ursprungligen postat av KarlRoos
Citat:
Ursprungligen postat av MMC
Jag tror inte include() gör det du tror att den gör.
Jo, jag kan använda variablar m.m. som finns på sidan som inkluderar modulen
Prolemet ligger inte i includen utan att jag inte kan få ut vad som står mellan module*/module till en sträng.
1 går inte att använda utanför preg_replace.
Då föreslår jag en titt på preg_replace syster preg_match http://se2.php.net/manual/en/function.preg-match.php
Speciellt argumentet $matches
MMC är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-04-19, 21:23 #5
WizKid WizKid är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2004
Inlägg: 618
WizKid WizKid är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2004
Inlägg: 618
Är det en XML-fil du försöker parsa? Varför inte använda en XML-parser isåfall? Som till exempel simplexml
WizKid är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-04-19, 22:34 #6
KarlRoos KarlRoos är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jul 2007
Inlägg: 1 416
KarlRoos KarlRoos är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jul 2007
Inlägg: 1 416
Citat:
Ursprungligen postat av MMC
Citat:
Originally posted by -KarlRoos@Apr 19 2008, 21:17
Citat:
Originally posted by -MMC@Apr 19 2008, 21:14
Jag tror inte include() gör det du tror att den gör.


Jo, jag kan använda variablar m.m. som finns på sidan som inkluderar modulen
Prolemet ligger inte i includen utan att jag inte kan få ut vad som står mellan module*/module till en sträng.
1 går inte att använda utanför preg_replace.

Då föreslår jag en titt på preg_replace syster preg_match http://se2.php.net/manual/en/function.preg-match.php
Speciellt argumentet matches
Men jag måste få modulen på exakt rätt plats

Citat:
Ursprungligen postat av WizKid
Är det en XML-fil du försöker parsa? Varför inte använda en XML-parser isåfall? Som till exempel simplexml
Nej, det är ett PHP script.
KarlRoos är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-04-19, 22:34 #7
xarphs avatar
xarph xarph är inte uppkopplad
Flitig postare
 
Reg.datum: Feb 2007
Inlägg: 346
xarph xarph är inte uppkopplad
Flitig postare
xarphs avatar
 
Reg.datum: Feb 2007
Inlägg: 346
Jao om det är XML så kan du köra någon random XML/RSS PHP-parser.

Men jag har skrivit en funktion i PHP som kan underlätta...

Kod:
function pattern ($start, $stop, $string)
{
  $pattern = "#" . $start . "(.*?)" . $stop. "#";
  preg_match_all($pattern, $string, $result);
  return $result[1];
}
function load($url, $bytes) //För php5
{
  if ($stream = @fopen($url, 'r')) 
  {
	$html = stream_get_contents($stream, $bytes);
	fclose($stream);
  return $html;
  }
}
Exempel på hur funktionerna fungerar:

Kod:
$firstLoad = load("http://www.webmasternetwork.se/nya_tradar.xml", 323600);

// Den ska hämta allt som är mellan <title> och </title> men i ditt fall får du köra: $modules = pattern('<module>', '</module>', $firstLoad);
$titles = pattern('<title>', '</title>', $firstLoad);

// Första titeln

echo $titles[0];

// Printar ut alla titlar som en array.

print_r($titles)
O.s.v, du förstår nog precis hur det fungerar
xarph är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-04-20, 14:37 #8
KarlRoos KarlRoos är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jul 2007
Inlägg: 1 416
KarlRoos KarlRoos är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jul 2007
Inlägg: 1 416
Citat:
Originally posted by xarph@Apr 19 2008, 22:34
Jao om det är XML så kan du köra någon random XML/RSS PHP-parser.
Men jag har skrivit en funktion i PHP som kan underlätta...
Kod:
function pattern start, stop, string
{
 pattern = # . start . .*? . stop. #;
 preg_match_allpattern, string, result;
 return result1;
}
function loadurl, bytes //För php5
{
 if stream = @fopenurl, r 
 {
	html = stream_get_contentsstream, bytes;
	fclosestream;
 return html;
 }
}
Exempel på hur funktionerna fungerar:
Kod:
firstLoad = loadhttp//www.webmasternetwork.se/nya_tradar.xml, 323600;
// Den ska hämta allt som är mellan title och /title men i ditt fall får du köra modules = patternmodule, /module, firstLoad;
titles = patterntitle, /title, firstLoad;
// Första titeln
echo titles0;
// Printar ut alla titlar som en array.
print_rtitles
O.s.v, du förstår nog precis hur det fungerar
Fint Men då kan jag inte köra modulen tillsammans med sidan (include),
tack ändå för att du försökte
KarlRoos är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 09:29.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017