Надеюсь, в один прекрасный день будет встроенная поддержка для инвертирования выражения соответствия. В то же время, вот Java 8-программа, которая генерирует регулярные выражения для перевернутого сопоставления префикса, используя базовые функции регулярного выражения, поддерживаемые фильтром Couchbase XDCR.
Это должно работать до тех пор, пока ваши ключевые префиксы как-то ограничены от остальной части ключа. Обязательно включите разделитель во вводе при изменении этого кода.
Пример выходных данных red:
, reef:
, green:
является:
^([^rg]|r[^e]|g[^r]|re[^de]|gr[^e]|red[^:]|ree[^f]|gre[^e]|reef[^:]|gree[^n]|green[^:])
Файл: NegativeLookaheadCheater.java
import java.util.*;
import java.util.stream.Collectors;
public class NegativeLookaheadCheater {
public static void main(String[] args) {
List<String> input = Arrays.asList("red:", "reef:", "green:");
System.out.println("^" + invertMatch(input));
}
private static String invertMatch(Collection<String> literals) {
int maxLength = literals.stream().mapToInt(String::length).max().orElse(0);
List<String> terms = new ArrayList<>();
for (int i = 0; i < maxLength; i++) {
terms.addAll(terms(literals, i));
}
return "(" + String.join("|", terms) + ")";
}
private static List<String> terms(Collection<String> words, int index) {
List<String> result = new ArrayList<>();
Map<String, Set<Character>> prefixToNextLetter = new LinkedHashMap<>();
for (String word : words) {
if (word.length() > index) {
String prefix = word.substring(0, index);
prefixToNextLetter.computeIfAbsent(prefix, key -> new LinkedHashSet<>()).add(word.charAt(index));
}
}
prefixToNextLetter.forEach((literalPrefix, charsToNegate) -> {
result.add(literalPrefix + "[^" + join(charsToNegate) + "]");
});
return result;
}
private static String join(Collection<Character> collection) {
return collection.stream().map(c -> Character.toString(c)).collect(Collectors.joining());
}
}
Acc. на http://developer.couchbase.com/documentation/server/current/xdcr/xdcr-create.html, вы должны иметь возможность использовать lookaheads, как и для jS. –