[Schmitzm-commits] r2159 - trunk/schmitzm-core/src/main/java/de/schmitzm/regex
scm-commit at wald.intevation.org
scm-commit at wald.intevation.org
Sat Dec 8 23:30:00 CET 2012
Author: alfonx
Date: 2012-12-08 23:30:00 +0100 (Sat, 08 Dec 2012)
New Revision: 2159
Modified:
trunk/schmitzm-core/src/main/java/de/schmitzm/regex/RegexCache.java
Log:
RegexCache performance Optimierung.
Modified: trunk/schmitzm-core/src/main/java/de/schmitzm/regex/RegexCache.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/regex/RegexCache.java 2012-12-08 22:19:13 UTC (rev 2158)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/regex/RegexCache.java 2012-12-08 22:30:00 UTC (rev 2159)
@@ -9,7 +9,9 @@
import org.apache.solr.util.ConcurrentLRUCache;
import org.apache.solr.util.ConcurrentLRUCache.Stats;
+import com.eaio.stringsearch.BNDM;
import com.eaio.stringsearch.BNDMCI;
+import com.eaio.stringsearch.StringSearch;
/**
* Cached compilierte Pattern und auch Ergebnisse von RegExes. Use the matchers methods to obtain cached result and add
@@ -132,14 +134,31 @@
final String value = object instanceof String ? (String) object : object.toString();
- // Hier beginnt eine interessante Optimierung. Wenn der String keine Regex ist, und nicht länger 32, dann wird ein schnellere Stringsuche verwendet.
+ // Hier beginnt eine interessante Optimierung. Wenn der String keine Regex ist, und nicht länger 32, dann wird
+ // ein schnellere Stringsuche verwendet.
boolean canSpeedup = true;
+ boolean speedUpIgnorecase = true;
- if (regex.length() > 32 || looksLikeRegex(regex))
+ if (regex.length() > 32)
canSpeedup = false;
+ else {
+ String copy = regex;
+ if (copy.startsWith("(?is)") || copy.startsWith("(?im)") || copy.startsWith("(?ims)")) {
+ copy = copy.substring(5);
+ speedUpIgnorecase = true;
+ }
+ if (copy.startsWith("^.*?")) {
+ copy = copy.substring(4);
+ }
+ canSpeedup = !(looksLikeRegex(copy));
+ }
if (canSpeedup) {
- int idx = new BNDMCI().searchString(value, regex);
+
+ StringSearch bndm = speedUpIgnorecase ? new BNDMCI() : new BNDM();
+ int searchString = bndm.searchString(value, regex);
+
+ int idx = searchString;
return idx >= 0;
} else {
return result(regex, value) != null;
More information about the Schmitzm-commits
mailing list