Re: sorting an array of regexes
| From: | Eugene Lee | Date: | Tue, 18 Nov 2003 12:46:31 +0000 |
| Subject: | Re: sorting an array of regexes | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-170088@lists.php.net to get a copy of this message | ||
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.