David Bremner venit, vidit, dixit 2021-04-24 12:57:17: > Erwan Hingant <erwan.hingant@mailo.com> writes: > > > Hello, > > > > I have some troubles with regex negative lookahead. When searching > > in > > all directories but one (say inbox), I do the following query: > > > > > notmuch search folder:"/^(?!inbox)/" > > > > As far as I know, lookaheads are not supported by POSIX regex, which is > what notmuch uses. regex(7) is a bit terse, but the relevant section > seems to be > > An atom is a regular expression enclosed in "()" (matching a match for > the regular expression), an empty set of "()" (matching the null > string)(!), a bracket expression (see below), '.' (matching any single > character), '^' (matching the null string at the beginning of a line), > '$' (matching the null string at the end of a line), a '\' followed by > one of the characters "^.[$()|*+?{\" (matching that character taken as > an ordinary character), a '\' followed by any other character(!) > (matching that character taken as an ordinary character, as if the '\' > had not been present(!)), or a single character with no other signifi‐ > cance (matching that character). A '{' followed by a character other > than a digit is an ordinary character, not the beginning of a bound(!). > It is illegal to end an RE with '\'. > > I'm not sure your whole problem, but maybe regex is not the right answer > here. In general they should be a last resort in notmuch, for efficiency > reasons. Does "not folder:inbox" do what you want? Yes, that solves the problem as stated (all folders except inbox). As for the error message: both "^" and "(?!inbox)" are assertions in regex lingo, not atoms. A negative assertion like "(?!inbox)" asserts whether the previous atom is considered a match or not (under the assumption that the atom matches something). The error message seems to say that you cannot use an assertion without a preceding atom that it applies to. But, assertions are really for the case where you want to base a match result (true/false) on parts of the expression that you do not want to be part of the match itself. As far as I understand, matching in xapian is solely about the true/false result, so I'm wondering when you would really need lookahead and lookbehind (instead of groups). Michael _______________________________________________ notmuch mailing list -- notmuch@notmuchmail.org To unsubscribe send an email to notmuch-leave@notmuchmail.org