nix-env: Add regular expression support in selectors
So you can now do things like: $ nix-env -qa '.*zip.*' $ nix-env -qa '.*(firefox|chromium).*'
This commit is contained in:
		
							parent
							
								
									3800f441e4
								
							
						
					
					
						commit
						104e55bb7f
					
				
					 5 changed files with 165 additions and 23 deletions
				
			
		
							
								
								
									
										33
									
								
								src/libutil/regex.cc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								src/libutil/regex.cc
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,33 @@
 | 
			
		|||
#include "regex.hh"
 | 
			
		||||
#include "types.hh"
 | 
			
		||||
 | 
			
		||||
namespace nix {
 | 
			
		||||
 | 
			
		||||
Regex::Regex(const string & pattern)
 | 
			
		||||
{
 | 
			
		||||
    /* Patterns must match the entire string. */
 | 
			
		||||
    int err = regcomp(&preg, ("^(" + pattern + ")$").c_str(), REG_NOSUB | REG_EXTENDED);
 | 
			
		||||
    if (err) throw Error(format("compiling pattern ‘%1%’: %2%") % pattern % showError(err));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Regex::~Regex()
 | 
			
		||||
{
 | 
			
		||||
    regfree(&preg);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool Regex::matches(const string & s)
 | 
			
		||||
{
 | 
			
		||||
    int err = regexec(&preg, s.c_str(), 0, 0, 0);
 | 
			
		||||
    if (err == 0) return true;
 | 
			
		||||
    else if (err == REG_NOMATCH) return false;
 | 
			
		||||
    throw Error(format("matching string ‘%1%’: %2%") % s % showError(err));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
string Regex::showError(int err)
 | 
			
		||||
{
 | 
			
		||||
    char buf[256];
 | 
			
		||||
    regerror(err, &preg, buf, sizeof(buf));
 | 
			
		||||
    return string(buf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue