Just nu i M3-nätverket
Jump to content

Reguljära uttryck


TicoRoman

Recommended Posts

$result (kan innehålla): <a href="/user_profil.php?user=användarnamn">användarnamn</a>

 

användarnamn kan bestå av i stort sett alla möjliga tecken, tex *}] osv...

 

Jag vill spara användrnamnet i en variabel, tex

$match, men jag lyckas inte få rätt på det reguljära uttrycket.

 

while(!feof($fp))
	{
$result = fgets($fp);
if(eregi("ett fint reg-uttryck här, tack",$result,$match))
		{
			//Gör något med $match här
		}
}

Ja ni ser i koden vad det är som fattas ;)

 

 

 

Almir - ...

____________________________________________________________

-Läser Programmet för Informatik med Systemvetenskap på MDH, Västerås.-

 

[inlägget ändrat 2002-11-22 10:53:24 av TicoRoman]

[inlägget ändrat 2002-11-22 10:53:54 av TicoRoman]

[inlägget ändrat 2002-11-22 10:54:40 av TicoRoman]

[inlägget ändrat 2002-11-22 10:55:44 av TicoRoman]

Link to comment
Share on other sites

Ja, mitt tips är att du hämtar användarnamnet från href-attributet, då detta inte kan innehålla vilka tecken som helst, utan endast a-z, 0-9 samt % (användarnamnet är ju kodat med rawurlencode).

 

Så här skulle jag göra:

while(!feof($fp)) {
$result = fgets($fp);
if(preg_match("/" . addcslashes(quotemeta("<a href=\"/user_profil.php?user="), "/") . "([^&\"])+/i", $result, $match)) {
echo $match[1];
}
}

Frågor?

Jag har inte testat koden, men jag tror den borde fungera. :-)

 

Link to comment
Share on other sites

Antingen så är det något skumt med koden, eller så kan jag inte använda mig av resultatet.

 

När jag i if-satsen gör följande:

echo $match[1];
		echo "<br>";

för att skriva ut alla användarnamn som scriptet hittade så blir resultatet så här:

 

[grön]//URL bortredigerad. 021123.//[/kur]

 

Dvs ett enda tecken skrivs ut på varje rad. Det verkar som om det är första tecknet i varje användranamn, eller något sådan skumt?

 

Sedan har jag stött på ett annat problem, nämligen att den riktiga sidan jag ska leta i är lösenordsskyddad, men det tar jag i en annan tråd senare idag.

 

 

Almir - ...

____________________________________________________________

-Läser Programmet för Informatik med Systemvetenskap på MDH, Västerås.-

 

[inlägget ändrat 2002-11-22 13:03:53 av TicoRoman]

[inlägget ändrat 2002-11-23 06:54:05 av TicoRoman]

Link to comment
Share on other sites

Ser det alltid ut sådär, att du har användarnamnet utanför html-taggarna? I så fall är det ju en kakbit, bara att plocka ut det som står mellan > och <.

 

$match = substr($result, $pos = strpos($result, ">") + 1, strpos($result, "<", $pos));

 

 

Link to comment
Share on other sites

Hur ser hela koden ut? Det verkar nämligen som om du refererar till en plats i en sträng istället för en plats i en matris.

Testa att bara skriva detta i if-satsen:

if(..){
print_r($match);
echo "<br />";
}

 

Får du då hela användarnamnet någonstans?

 

Link to comment
Share on other sites

Hur ser hela koden ut?

$filename = "komsiluk_users_20021122.htm";

$fp = fopen ($filename, "r");

if($fp)
{
echo "<p><b>Utskriften:</b><br><br>";

while(!feof($fp))
{
	$result = fgets($fp);

	if(preg_match("/" . addcslashes(quotemeta("<a href=\"/user_profil.php?user="), "/") . "([^&\"])+/i", $result, $match))
	{
		print_r($match);			echo "<br />";
}
}
}
else
{
echo "Ej inläst";
}
fclose($fp);

 

print_r($match);

Då gör den så här:

 

[grön]//URL bortredigerad. 021123.//[/kur]

 

 

Almir - ...

____________________________________________________________

-Läser Programmet för Informatik med Systemvetenskap på MDH, Västerås.-

 

[inlägget ändrat 2002-11-23 06:54:50 av TicoRoman]

Link to comment
Share on other sites

Ser det alltid ut sådär, att du har användarnamnet utanför html-taggarna?

Jo, fast det finns en hel massa andra "vanliga" länkar, som jag inte ska ha med. Alltså måste den jämföra med "user_profil.php?user=" i länken, som är det enda som skiljer länkarna med användarna från andra länkar på sidan.

 

 

Almir - ...

____________________________________________________________

-Läser Programmet för Informatik med Systemvetenskap på MDH, Västerås.-

 

[inlägget ändrat 2002-11-22 15:55:54 av TicoRoman]

Link to comment
Share on other sites

Suck, nu ser jag vad felet var!

Ibland (mycket sällan dock) skriver man fortare än vad man tänker.

Det ska inte vara ([^&\"])+ utan plustecknet ska vara innanför parantesen: ([^&\"]+)

 

Nu ska det fungera med $match[1].

 

Link to comment
Share on other sites

Japp, nu fungerar det som det ska. Tack!

 

Jag måste säga att jag lärt mig väldigt mycket här på PHP-forumet, tack vare speciellt 2-3 personer som brukar svara här regelbundet. TACK!

 

Nu ska jag ställa nästa fråga, i ny tråd, för att inte blanda ihop allt i samma tråd.

 

 

Almir - ...

____________________________________________________________

-Läser Programmet för Informatik med Systemvetenskap på MDH, Västerås.-

 

[inlägget ändrat 2002-11-22 16:37:53 av TicoRoman]

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...