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(" ", " "), $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ä).
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.)
Aihe on jo aika vanha, joten et voi enää vastata siihen.