[I18NGR] regular expressions και ελληνικά

Αλέξανδρος Διαμαντίδης adia at hellug.gr
Tue Mar 17 00:53:36 EET 2009


* Παναγιώτης Κατσαλούλης [2009-03-13 23:11]:
> Επί της ουσίας πάντως, θα διαφωνίσω πως είναι 4 οι τύποι, νομίζω πως
> είναι το πολύ 3, σύμφωνα με τη γραμματική μας. Το να κάνουμε mach
> μικρό με μικρό+τόνος είναι γραμματικό λάθος.

Εξαρτάται τι θέλεις να κάνεις... πχ. μπορεί να θέλεις να βρεις λέξεις
γραμμένες λάθος χωρίς τόνους. Βέβαια τότε θα έχεις και false positives,
οπότε θέλει όντως προσοχή.

Νομίζω η πιο απλή λύση για να λυθεί το πρόβλημα είναι να περνάς το regex
από μια συνάρτηση που να μετατρέπει τα φωνήεντα σε κατάλληλες κλάσεις
χαρακτήρων. Για παράδειγμα...

<?php

function expand_vowels($s)
{
        return str_replace(
                   array('α', 'ε', 'η', 'ι', 'υ', 'ο', 'ω'),
                   array('[αά]', '[εέ]', '[ηή]', '[ιίϊΐ]', '[υύϋυ]', '[οό]', '[ωώ]'),
                   $s);
}

$regex = expand_vowels('/παπαρουνα/iu');

foreach (array('παπαρούνα', 'παπάρουνα', 'ΠΑΠΑΡΟΥΝΑ') as $s) {
        if (preg_match($regex, $s)) {
                echo "$s matches\n";
        } else {
                echo "$s doesn't match\n";
        }
}

?>

Κάτι τέτοιο μπορεί να δουλέψει ακόμα και με πολυτονικά, αν κάνεις
αντικαταστάσεις του τύπου 'ω' -> '[ωώὼῶὠὡὤὥὢὣὦὧῳῴῲῷᾠᾡᾤᾥᾢᾣᾦᾧ]'.

Αλέξανδρος




More information about the I18ngr mailing list