escaping implicit regex (denoted by flag /x)
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusTree.java b/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusTree.java
index 0c82659..ade5135 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusTree.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusTree.java
@@ -159,7 +159,7 @@
 					if (flag.contains("x")) {
 						term.put("type", "type:regex");
 						if (!isRegex) {
-							key = escapeRegexSpecialChars(key); 
+							key = QueryUtils.escapeRegexSpecialChars(key); 
 						}
 						term.put("key", ".*?"+key+".*?"); // overwrite key
 					}
@@ -338,10 +338,6 @@
 		openNodeCats.pop();
 	}
 
-	private String escapeRegexSpecialChars(String key) {
-		return Pattern.quote(key);
-	}
-
 	/**
 	 * Parses a repetition node
 	 * @param node
@@ -451,7 +447,7 @@
 				else if (flag.contains("I")) term.put("caseInsensitive", false);
 				if (flag.contains("x")) {
 					if (!isRegex) {
-						key = escapeRegexSpecialChars(key); 
+						key = QueryUtils.escapeRegexSpecialChars(key); 
 					}
 					term.put("key", ".*?"+key+".*?");  // flag 'x' allows submatches: overwrite key with appended .*? 
 					term.put("type", "type:regex");
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/QueryUtils.java b/src/main/java/de/ids_mannheim/korap/query/serialize/QueryUtils.java
index e7a5a9b..61a97e2 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/QueryUtils.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/QueryUtils.java
@@ -7,6 +7,8 @@
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * @author hanl
@@ -372,6 +374,20 @@
         requestMap.put("@context", context);
     }
 
+    public static String escapeRegexSpecialChars(String key) {
+		key.replace("\\", "\\\\");
+		Pattern p = Pattern.compile("\\.|\\^|\\$|\\||\\?|\\*|\\+|\\(|\\)|\\[|\\]|\\{|\\}");
+		Matcher m = p.matcher(key);
+		while (m.find()) {
+			System.out.println(m.group(0));
+			String match = m.group();
+			System.out.println(key);
+			key = m.replaceAll("\\\\"+match);
+			System.out.println(" > "+key);
+		}
+		return key;
+	}
+
 
 
 }