On Tue, Nov 18, 2003 at 01:15:32PM +0100, Adam i Agnieszka Gasiorowski FNORD wrote:
: 
:       There is an array of regexes, for example
: 
:  $array = array('moon', '[wh]ood', '[^as]eed' ...
:  (about 300 entries). 
: 
:       I want to sort it comparing to the
:  character lenght of a regex. For example
:  [wh]ood is 4 characters, moon is 4 characters.
:  There are only letters of the alphabet and
:  letter ranges present in those regexes. I
:  want the "longest" ones first.
: 
:       How would you write the sorting function?

This might be the most functionally correct, although it's definitely
not the fastest route.

        function re_len($pat)
        {
                return strlen(preg_replace('/\[[^]]+]/', '_', $pat));
        }

        function re_sort($a_pat, $b_pat)
        {
                $a = re_len($a_pat);
                $b = re_len($b_pat);
                if ($a == $b)
                {
                        return 0;
                }
                return ($a < $b ) ? -1 : 1;
        }

        usort($array, 're_sort');

BTW, re_len() will bomb on certain oddball patterns with strange ranges.

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to