M Matti Medlem sedan dec. 1999 6 592 inlägg Frågan 28 feb. 2002 11:56 #1 Hej
Jag har variabeln $body som innehåller ett inläst HTML-dokument. I det inlästa HTML-dokumentet finns strängar som {body}, {title}, {navigation}, {footer} osv. Jag vill plocka ut dessa strängar och slänga in dem i en variabel/array av något slag. Har lekt runt lite med reguljära uttryck men inte lyckats åstadkomma något vettigt.
Hjälp?
N nicclas Medlem sedan feb. 2000 1 050 inlägg Kan du visa ett litet exempel på html-fil och hur du vill ersätta?
M Matti Medlem sedan dec. 1999 6 592 inlägg html-filen är en template
<html>
<head>
<title>{title}</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<table width="750" border="0" cellspacing="3" cellpadding="3">
<tr>
<td width="150" align="left" valign="top">
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="5"><b>{logo}</b></font></p>
<p> </p>
<p><a href="../msystem/skrivindata.php">lägg till sida</a><br>
<a href="../msystem/andradata.php">ändra data</a><br>
navlink3<br>
navlink4<br>
navlink5 </p>
<p> </p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="4"><b>Ads:</b></font></p>
<p>{ads}</p>
</td>
<td align="left" valign="top">{content}</td>
</tr>
</table>
</body>
</html>
Jag vill plocka ut "title", "logo", "ads" och "content" och placera dessa i en variabel så att jag kan lagra dem i en databas.
Möjligt?
S SPiN Medlem sedan mars 2000 7 896 inlägg Klart att det är möjligt!
<?php
...
preg_match ( "{[a-z]}", $body, $arrMatches );
for ( $i = 1; $i < count ( $arrMatches ); $i++ ) {
// Stoppa in $arrMatches[ $i ] i databasen
}
...
?>
Det reguljära uttrycket tillåter endast stora och små bokstäver från det engelska alfabetet mellan de två "bracketchar'sen" ( { och } ). Resultatet hamnar i arrayen $arrMatches, och loopen börjar på 1, etftersom att $arrMatches[ 0 ] innehåller hela strängen och inget resultat.
M Matti Medlem sedan dec. 1999 6 592 inlägg Hej,
tack för svaret.
När jag testkörde följande skript skrevs ingenting ut på sidan
<?php
$body = "sample text {with} some nice {template} elements and lots of {brackets}";
preg_match ( "{[a-z]}", $body, $arrMatches );
for ( $i = 1; $i < count ( $arrMatches ); $i++ ) {
// skriver ut innehållet
echo $arrMatches[$i];
}
?>
Nu är jag visserligen helt hopplös på loopar men echo $arrMatches[$i]; borde väl skriva ut innehållet i $arrMatches? Vad har jag missat?
S SPiN Medlem sedan mars 2000 7 896 inlägg Ja, det borde det. Jag kom på en sak, så här borde mönsret se ut:
preg_match ( "/\{([a-z]{1,})\}/is", $body, $arrMatches );
Vad får du för resultat om du skriver ut storleken på arrayen? ( echo count ( $arrMatches ) ).
M Matti Medlem sedan dec. 1999 6 592 inlägg echo count ( $arrMatches ); ger siffran 2.
<?php
$body = "sample text {with} some nice {template} elements and lots of {brackets}";
preg_match ( "/\{([a-z]{1,})\}/is", $body, $arrMatches );
for ( $i = 1; $i < count ( $arrMatches ); $i++ ) {
// skriver ut innehållet
echo $arrMatches[$i]; // <------ skriver ut "with"
}
?>
$arrMatches[0] skriver ut "{with}".
S SPiN Medlem sedan mars 2000 7 896 inlägg Använd preg_match_all () istället för preg_match (). :)
Red.}
Så här ser scriptet ut alltså: :)
<?php
$body = "sample text {with} some nice {template} elements and lots of {brackets}";
preg_match_all ( "{([a-zA-Z]{1,})}", $body, $arrMatches );
for ( $i = 1; $i < count ( $arrMatches ); $i++ ) {
// skriver ut innehållet
echo $arrMatches[ $i ][ 1 ];
}
?>
M Matti Medlem sedan dec. 1999 6 592 inlägg aaah! :)
Fungerar fortfarande inte. Skriptet som du postade ovan skriver ut "text". Fungerar det hos dig?
N nicclas Medlem sedan feb. 2000 1 050 inlägg Prova så här ;)
<?php
$body = "sample text {with} some nice {template} elements and lots of {brackets}
";
preg_match_all("/{([a-zA-Z]+)}/mis",$body,$arrMatches);
for ($i=0;$i<=count($arrMatches);$i++) {
// skriver ut innehållet
echo $arrMatches[1][$i]."\n";
}
?>
/nicclas - https://www.nyhetsrubriker.com
M Matti Medlem sedan dec. 1999 6 592 inlägg Hey, där ser man. Nu fungerar det. :)
Tack för hjälpen, Spin och nicclas. :)