All pastes #941587 Raw Edit

Untitled

public text v1 · immutable
·published 2008-03-13 20:19 UTC
rendered paste body
				// Find all the braces subgroups
				preg_match_all( '%\{([^\}.]+)+\}%', $pattern, $matches );
				
				// Replace commas by vertical bars and wrap values with parentheses
				$new_parens= array();
				foreach ($matches[1] as $k => $match) {
					$new_parens[$k]= preg_replace( '%,%', '|', $match );
					$new_parens[$k]= "(" . $new_parens[$k] . ")";
				}
				
				// We will use this pattern to replace the braces by our parentheses alternative patterns
				$old_braces= preg_replace( '%.+%', '%$0%', $matches[0] );
				
				// Prepare the vague pattern using stars rather than possible values in braces
				$stars_pattern= preg_replace( '%\{([^\}.]+)+\}%', '*', $pattern );
				
				// Prepare the parentheses version of the pattern
				$parens_pattern= preg_replace( $old_braces, $new_parens, $pattern );
				
				// Get all the files that could match our pattern
				$files_list= Utils::glob( $stars_pattern, ($flags-128) );
				
				// Filter out non-matching files
				$result= preg_grep( "%" . $parens_pattern . "%i", $files_list );

				// Return a reindexed array, else there could be missing keys
				$result= array_values($result);