Eugene Lee wrote: > 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.
Thank you, that will certainly work :8]. Does anyone have any thoughts how to make it faster? It is not VERY critical, because the calculation will be done only once, at initialization, but...well, you know :8]. * * * How about...if I count the number of ']' in string and then add it to the strlen - (the number of ']' x 2)? There are no [ nor ] in these except in the character range parts. Does that look faster than applying regular expression? > 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. Like? Sorry, I can't think of anything right now... -- Seks, seksić, seksolatki... news:pl.soc.seks.moderowana http://hyperreal.info { iWanToDie } WiNoNa ) ( http://szatanowskie-ladacznice.0-700.pl foReVeR( * ) Poznaj jej zwiewne kształty... http://www.opera.com 007 -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php