[ https://issues.apache.org/jira/browse/AUTOTAG-24?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Hubert Law updated AUTOTAG-24: ------------------------------- Description: Despite AUTOTAG-21 the regex still eats up CPU time due to the inefficiency of the pattern {{s*$}} which, in case of long consecutive white-space in the middle of the body, consumes O(n^2^) time while failing to match (since it will attempt to start matching at each white space position). Matching the actual non-whitespace content directly may be more efficient in this case, e.g {{private static final Pattern PATTERN = Pattern.compile("}}{{^\\s*(\\S(?:.*\\S)?)*}} {{*s*$");}} {{if (body != null) {}} {{ final Matcher matcher = PATTERN.matcher(body);}} {{ if (matcher.matches()) {}} {{ body = matcher.group(1);}} {{ } else {}} {{ body = null;}} {{ } }} {{}}} Backtracking is limited to the final white spaces, in linear time. was: Despite AUTOTAG-21 the regex still eats up CPU time due to the inefficiency of the pattern {{s*$}} which, in case of long consecutive white-space in the middle of the body, consumes O(n^2^) time while failing to match (since it will attempt to start matching at each white space position). Matching the actual non-whitespace content directly may be more efficient in this case, e.g {{private static final Pattern PATTERN = Pattern.compile("}}{{^\\s*(\\S(?:.*\\S)?)\\s*$");}} {{if (body != null) {}} {{ final Matcher matcher = PATTERN.matcher(body);}} {{ if (matcher.matches()) {}} {{ body = matcher.group(1);}} {{ } else {}} {{ body = null;}} {{ } }} {{}}} Backtracking is limited to the final white spaces, in linear time. > Efficiency of regular expression under AbstractModelBody.evaluateAsString > -------------------------------------------------------------------------- > > Key: AUTOTAG-24 > URL: https://issues.apache.org/jira/browse/AUTOTAG-24 > Project: Tiles Autotag > Issue Type: Improvement > Affects Versions: 1.2.0 > Reporter: Hubert Law > Priority: Minor > Labels: regex > > Despite AUTOTAG-21 the regex still eats up CPU time due to the inefficiency > of the pattern {{s*$}} which, in case of long consecutive white-space in the > middle of the body, consumes O(n^2^) time while failing to match (since it > will attempt to start matching at each white space position). > Matching the actual non-whitespace content directly may be more efficient in > this case, e.g > > {{private static final Pattern PATTERN = > Pattern.compile("}}{{^\\s*(\\S(?:.*\\S)?)*}} > {{*s*$");}} > {{if (body != null) {}} > {{ final Matcher matcher = PATTERN.matcher(body);}} > {{ if (matcher.matches()) {}} > {{ body = matcher.group(1);}} > {{ } else {}} > {{ body = null;}} > {{ } }} > {{}}} > Backtracking is limited to the final white spaces, in linear time. -- This message was sent by Atlassian JIRA (v7.6.3#76005)