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.