X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=lib%2Fregexp-fields.cc;h=539915d892f9529d3d011dfa7611bb37aba718d2;hb=8ed6a172b35708428f84f30af44fa81c12852e43;hp=c6d9d94f7686063bb59f76fbd4daf0a19ae81500;hpb=5cb452c325e1f69e43dca610f48b9396cba9c039;p=notmuch diff --git a/lib/regexp-fields.cc b/lib/regexp-fields.cc index c6d9d94f..539915d8 100644 --- a/lib/regexp-fields.cc +++ b/lib/regexp-fields.cc @@ -227,7 +227,8 @@ RegexpFieldProcessor::operator() (const std::string & str) * phrase parsing, when possible */ std::string query_str; - if (*str.rbegin () != '*' || str.find (' ') != std::string::npos) + if ((str.at (0) != '(' || *str.rbegin () != ')') && + (*str.rbegin () != '*' || str.find (' ') != std::string::npos)) query_str = '"' + str + '"'; else query_str = str; @@ -235,7 +236,15 @@ RegexpFieldProcessor::operator() (const std::string & str) return parser.parse_query (query_str, NOTMUCH_QUERY_PARSER_FLAGS, term_prefix); } else { /* Boolean prefix */ - std::string term = term_prefix + str; + std::string query_str; + std::string term; + + if (str.length () > 1 && str.at (str.size () - 1) == '/') + query_str = str.substr (0, str.size () - 1); + else + query_str = str; + + term = term_prefix + query_str; return Xapian::Query (term); } }