else if (delim == '(')
delim = ')';
else if (delim == '<')
delim = '>';
else if (delim == '\\' || Character.isLetterOrDigit(delim)) {
throw new QuercusException(L.l(
"Delimiter {0} in regexp '{1}' must not be backslash or alphanumeric.",
String.valueOf(delim),
rawRegexp));
}
int tail = rawRegexp.lastIndexOf(delim);
if (tail <= 0)
throw new QuercusException(L.l(
"Can't find second {0} in regexp '{1}'.",
String.valueOf(delim),
rawRegexp));
StringValue sflags = rawRegexp.substring(tail);
StringValue pattern = rawRegexp.substring(head + 1, tail);
_pattern = pattern;
int flags = 0;
for (int i = 0; sflags != null && i < sflags.length(); i++) {
switch (sflags.charAt(i)) {
case 'm': flags |= Regcomp.MULTILINE; break;
case 's': flags |= Regcomp.SINGLE_LINE; break;
case 'i': flags |= Regcomp.IGNORE_CASE; break;
case 'x': flags |= Regcomp.IGNORE_WS; break;
case 'g': flags |= Regcomp.GLOBAL; break;
case 'A': flags |= Regcomp.ANCHORED; break;
case 'D': flags |= Regcomp.END_ONLY; break;
case 'U': flags |= Regcomp.UNGREEDY; break;
case 'X': flags |= Regcomp.STRICT; break;
case 'u': flags |= Regcomp.UTF8; break;
case 'e': _isEval = true; break;
}
}
_flags = flags;
// XXX: what if unicode.semantics='true'?
if ((flags & Regcomp.UTF8) != 0) {
_pattern = fromUtf8(pattern);
if (pattern == null)
throw new QuercusException(L.l("Regexp: error converting subject to utf8"));
}
}