X-Git-Url: https://git.notmuchmail.org/git?a=blobdiff_plain;f=lib%2Fregexp-fields.cc;h=539915d892f9529d3d011dfa7611bb37aba718d2;hb=bfcf9a6c102af9232b6d2e720f919ff1c9b431f8;hp=c6d9d94f7686063bb59f76fbd4daf0a19ae81500;hpb=3e2e724d53a1dce3ba00a20c71b2e6f735678136;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); } }