Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Tekstin korvaaminen osittain

Macro [18.12.2009 19:18:05]

#

Kuvitellaan, että olisi nyt jokin ohjelmointikieli, jonka for-silmukan rakenne olisi seuraava:

for i < 10 as i:
     print i;
endfor;

Miten pystyisin korvaamaan koko tekstistä esimerkiksi kaikki for-kohdat merkkijonolla <span style="color: blue">for</span> siten, että vain kokonaiset sanat korvattaisiin. Esimerkiksi kohtaa endfor; ei väritettäisi.

Muokkaus. Katsoppas kummaa, oppaissa oli säännöllisten lausekkeiden osiossa kerrottu hyvin selkeästi. =)

Muokkaus. Ongelmana on seuraava: Jos lainausmerkkejen sisällä oleva teksi korvataan harmaalla, ja numerot oranssilla, niin nähtävästi myös numerot lainausmerkkejen sisällä korvautuvat oranssilla. Miten tämä korjataan?

Tässä koodi, jota olen väsännyt:

<?php
function highlight($koodi) {
	// Sinisellä korostetut
	$sininen = array("for", "while", "if", "end", "=>", "as", "print", "else", "break");

	$rivit = explode("\r\n", $koodi);
	for($i = 0; $i < sizeof($rivit); $i++) {
		$rivit[$i] = str_replace(array(" ", "	"), array("&nbsp;", "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"), $rivit[$i]);
		$rivit[$i] = preg_replace("/\"(.*?)\"/", "<span style=\"color: gray;\">\"$1\"</span>", $rivit[$i]);
		$rivit[$i] = preg_replace("/([0-9])/", "<span style=\"color: orange;\">$1</span>", $rivit[$i]);
		$rivit[$i] = preg_replace("/\+/", "<span style=\"color: blue; font-weight: bold\">+</span>", $rivit[$i]);

		if(substr($rivit[$i], 0, 1) == "#") {
			$rivit[$i] = str_replace($rivit[$i], "<span style=\"color: rgb(0, 128, 0)\">{$rivit[$i]}</span>\n", $rivit[$i]);
		}

		for($a = 0; $a < sizeof($sininen); $a++) {
			$rivit[$i] = preg_replace("/{$sininen[$a]}/", "<span style=\"color: blue; font-weight: bold\">{$sininen[$a]}</span>", $rivit[$i]);
		}

		echo $rivit[$i] . "<br>\n";
	}
}
?>

Ja esimerkki teksti:

# For silmukka, joka lopetetaan jos i:n jakojäännös on 2.

print "Tulostetan numerot nollasta kymmeneen, mutta jos luvun jakojäännös on 2 niin lopetetaan";
for 0 => 10 as i:
	if i % == 2:
		break;
	else:
		# Luku i^i =
		print "Luku " + i + "^" + i + " = " i ^ i;
end;

Lisäksi kommentit eivät tulostu oikein (Väritys jää, koska edessä on välilyöntejä).

Metabolix [19.12.2009 00:00:26]

#

Säännöllisessä lausekkeessa \b tarkoittaa sanarajaa, eli esimerkiksi \bfor\b tarkoittaa kokonaista for-sanaa. Muista myös, että \ pitää kirjoittaa kahtena. (Pelkkä "\b" on vain yksi backspace, "\\b" sisältää merkit \ ja b.)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta