/** * Construct a Regular expression from the given {@code pattern} and {@code flags} strings. * * @param pattern RegExp pattern string * @param flags RegExp flag string * @throws ParserException if flags is invalid or pattern string has syntax error. */ public JoniRegExp(final String pattern, final String flags) throws ParserException { super(pattern, flags); int option = Option.SINGLELINE; if (this.isIgnoreCase()) { option |= Option.IGNORECASE; } if (this.isMultiline()) { option &= ~Option.SINGLELINE; option |= Option.NEGATE_SINGLELINE; } try { RegExpScanner parsed; try { parsed = RegExpScanner.scan(pattern); } catch (final PatternSyntaxException e) { // refine the exception with a better syntax error, if this // passes, just rethrow what we have Pattern.compile(pattern, 0); throw e; } if (parsed != null) { final char[] javaPattern = parsed.getJavaPattern().toCharArray(); this.regex = new Regex(javaPattern, 0, javaPattern.length, option, Syntax.JAVASCRIPT); this.groupsInNegativeLookahead = parsed.getGroupsInNegativeLookahead(); } } catch (final PatternSyntaxException | JOniException e2) { throwParserException("syntax", e2.getMessage()); } }
@Test public void testDump() { new Regex("^a{3,}(.*)[z]++\\s\\1x$").dumpTree(); new Regex("^a{3,}(.*)[z]++\\s\\1x$").dumpByteCode(); new Regex("(abc){4,}{2,5}").dumpTree(); new Regex("(abc){4,}{2,5}").dumpByteCode(); new Regex("aaa|aa|bbbb|ccc").dumpTree(); new Regex("aaa|aa|bbbb|ccc").dumpByteCode(); new Regex("(?:ZFVR.(\\d+\\.\\d+))|(?:(?:Sversbk|TenaCnenqvfb|Vprjrnfry).(\\d+\\.\\d+))|(?:Bcren.(\\d+\\.\\d+))|(?:NccyrJroXvg.(\\d+(?:\\.\\d+)?))").dumpTree(); new Regex("(?:ZFVR.(\\d+\\.\\d+))|(?:(?:Sversbk|TenaCnenqvfb|Vprjrnfry).(\\d+\\.\\d+))|(?:Bcren.(\\d+\\.\\d+))|(?:NccyrJroXvg.(\\d+(?:\\.\\d+)?))").dumpByteCode(); }
/** * Construct a Regular expression from the given {@code pattern} and {@code flags} strings. * * @param pattern RegExp pattern string * @param flags RegExp flag string * @throws ParserException if flags is invalid or pattern string has syntax error. */ public JoniRegExp(final String pattern, final String flags) throws ParserException { super(pattern, flags); int option = Option.SINGLELINE; if (this.isIgnoreCase()) { option |= Option.IGNORECASE; } if (this.isMultiline()) { option &= ~Option.SINGLELINE; option |= Option.NEGATE_SINGLELINE; } try { RegExpScanner parsed; try { parsed = RegExpScanner.scan(pattern); } catch (final PatternSyntaxException e) { // refine the exception with a better syntax error, if this // passes, just rethrow what we have Pattern.compile(pattern, 0); throw e; } if (parsed != null) { char[] javaPattern = parsed.getJavaPattern().toCharArray(); this.regex = new Regex(javaPattern, 0, javaPattern.length, option, Syntax.JAVASCRIPT); this.groupsInNegativeLookahead = parsed.getGroupsInNegativeLookahead(); } } catch (final PatternSyntaxException | JOniException e2) { throwParserException("syntax", e2.getMessage()); } }