Class Perl5Compiler
- All Implemented Interfaces:
PatternCompiler
Perl5Compiler and Perl5Matcher are designed with the intent that you use a
separate instance of each per thread to avoid the overhead of both
synchronization and concurrent access (e.g., a match that takes a long time
in one thread will block the progress of another thread with a shorter
match). If you want to use a single instance of each in a concurrent program,
you must appropriately protect access to the instances with critical
sections. If you want to share Perl5Pattern instances between concurrently
executing instances of Perl5Matcher, you must compile the patterns with
READ_ONLY_MASK
.
- Since:
- 1.0
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final char
private int
private static final char
private static final char
Lookup table for POSIX character class namesprivate static final String
private CharStringPointer
private static final char
private final char[]
private static final char
private static final int
private int
private char[]
private int
private static final char
private boolean
private static final int
private static final char
private static final int
private static final int
private static final int
static final int
A mask passed as an option to thecompile
methods to indicate a compiled regular expression should be case insensitive.static final int
The default mask for thecompile
methods.static final int
A mask passed as an option to thecompile
methods to indicate a compiled regular expression should be treated as a Perl5 extended pattern (i.e., a pattern using the /x modifier).static final int
A mask passed as an option to thecompile
methods to indicate a compiled regular expression should treat input as having multiple lines.static final int
A mask passed as an option to thecompile
methods to indicate that the resulting Perl5Pattern should be treated as a read only data structure by Perl5Matcher, making it safe to share a single Perl5Pattern instance among multiple threads without needing synchronization.static final int
A mask passed as an option to thecompile
methods to indicate a compiled regular expression should treat input as being a single line. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate int
__emitArgNode
(char operator, char arg) private void
__emitCode
(char code) private int
__emitNode
(char operator) private char
private static boolean
__isComplexRepetitionOp
(char[] ch, int offset) private static boolean
__isSimpleRepetitionOp
(char ch) private int
__parseAlternation
(int[] retFlags) private int
__parseAtom
(int[] retFlags) private int
__parseBranch
(int[] retFlags) private int
__parseExpression
(boolean isParenthesized, int[] hintFlags) private static int
__parseHex
(char[] str, int off, int ml, int[] scanned) private static int
__parseOctal
(char[] str, int off, int ml, int[] scanned) private char
__parsePOSIX
(boolean[] negFlag) Parse POSIX epxression like [:foo:].private static boolean
__parseRepetition
(char[] str, int off) private int
private void
__programAddOperatorTail
(int current, int value) private void
__programAddTail
(int current, int value) private void
__programInsertOperator
(char operator, int oper) private static void
__setModifierFlag
(char[] flags, char ch) compile
(char[] pattern) Same as calling compile(pattern, Perl5Compiler.DEFAULT_MASK);compile
(char[] pattern, int options) Compiles a Perl5 regular expression into a Perl5Pattern instance that can be used by a Perl5Matcher object to perform pattern matching.Same as calling compile(pattern, Perl5Compiler.DEFAULT_MASK);Compiles a Perl5 regular expression into a Perl5Pattern instance that can be used by a Perl5Matcher object to perform pattern matching.static final String
quotemeta
(char[] expression) Given a character string, returns a Perl5 expression that interprets each character of the original string literally.static final String
Given a character string, returns a Perl5 expression that interprets each character of the original string literally.
-
Field Details
-
__WORSTCASE
private static final int __WORSTCASE- See Also:
-
__NONNULL
private static final int __NONNULL- See Also:
-
__SIMPLE
private static final int __SIMPLE- See Also:
-
__SPSTART
private static final int __SPSTART- See Also:
-
__TRYAGAIN
private static final int __TRYAGAIN- See Also:
-
__CASE_INSENSITIVE
private static final char __CASE_INSENSITIVE- See Also:
-
__GLOBAL
private static final char __GLOBAL- See Also:
-
__KEEP
private static final char __KEEP- See Also:
-
__MULTILINE
private static final char __MULTILINE- See Also:
-
__SINGLELINE
private static final char __SINGLELINE- See Also:
-
__EXTENDED
private static final char __EXTENDED- See Also:
-
__READ_ONLY
private static final char __READ_ONLY- See Also:
-
__HEX_DIGIT
- See Also:
-
__input
-
__sawBackreference
private boolean __sawBackreference -
__modifierFlags
private final char[] __modifierFlags -
__numParentheses
private int __numParentheses -
__programSize
private int __programSize -
__cost
private int __cost -
__program
private char[] __program -
__hashPOSIX
Lookup table for POSIX character class names -
DEFAULT_MASK
public static final int DEFAULT_MASKThe default mask for thecompile
methods. It is equal to 0. The default behavior is for a regular expression to be case sensitive and to not specify if it is multiline or singleline. When MULITLINE_MASK and SINGLINE_MASK are not defined, the ^, $, and . metacharacters are interpreted according to the value of isMultiline() in Perl5Matcher. The default behavior of Perl5Matcher is to treat the Perl5Pattern as though MULTILINE_MASK were enabled. If isMultiline() returns false, then the pattern is treated as though SINGLINE_MASK were set. However, compiling a pattern with the MULTILINE_MASK or SINGLELINE_MASK masks will ALWAYS override whatever behavior is specified by the setMultiline() in Perl5Matcher.- See Also:
-
CASE_INSENSITIVE_MASK
public static final int CASE_INSENSITIVE_MASKA mask passed as an option to thecompile
methods to indicate a compiled regular expression should be case insensitive.- See Also:
-
MULTILINE_MASK
public static final int MULTILINE_MASKA mask passed as an option to thecompile
methods to indicate a compiled regular expression should treat input as having multiple lines. This option affects the interpretation of the ^ and $ metacharacters. When this mask is used, the ^ metacharacter matches at the beginning of every line, and the $ metacharacter matches at the end of every line. Additionally the . metacharacter will not match newlines when an expression is compiled with MULTILINE_MASK , which is its default behavior.- See Also:
-
SINGLELINE_MASK
public static final int SINGLELINE_MASKA mask passed as an option to thecompile
methods to indicate a compiled regular expression should treat input as being a single line. This option affects the interpretation of the ^ and $ metacharacters. When this mask is used, the ^ metacharacter matches at the beginning of the input, and the $ metacharacter matches at the end of the input. The ^ and $ metacharacters will not match at the beginning and end of lines occurring between the begnning and end of the input. Additionally, the . metacharacter will match newlines when an expression is compiled with SINGLELINE_MASK , unlike its default behavior.- See Also:
-
EXTENDED_MASK
public static final int EXTENDED_MASKA mask passed as an option to thecompile
methods to indicate a compiled regular expression should be treated as a Perl5 extended pattern (i.e., a pattern using the /x modifier). This option tells the compiler to ignore whitespace that is not backslashed or within a character class. It also tells the compiler to treat the # character as a metacharacter introducing a comment as in Perl. In other words, the # character will comment out any text in the regular expression between it and the next newline. The intent of this option is to allow you to divide your patterns into more readable parts. It is provided to maintain compatibility with Perl5 regular expressions, although it will not often make sense to use it in Java.- See Also:
-
READ_ONLY_MASK
public static final int READ_ONLY_MASKA mask passed as an option to thecompile
methods to indicate that the resulting Perl5Pattern should be treated as a read only data structure by Perl5Matcher, making it safe to share a single Perl5Pattern instance among multiple threads without needing synchronization. Without this option, Perl5Matcher reserves the right to store heuristic or other information in Perl5Pattern that might accelerate future matches. When you use this option, Perl5Matcher will not store or modify any information in a Perl5Pattern. Use this option when you want to share a Perl5Pattern instance among multiple threads using different Perl5Matcher instances.- See Also:
-
-
Constructor Details
-
Perl5Compiler
public Perl5Compiler()
-
-
Method Details
-
quotemeta
Given a character string, returns a Perl5 expression that interprets each character of the original string literally. In other words, all special metacharacters are quoted/escaped. This method is useful for converting user input meant for literal interpretation into a safe regular expression representing the literal input.In effect, this method is the analog of the Perl5 quotemeta() builtin method.
- Parameters:
expression
- The expression to convert.- Returns:
- A String containing a Perl5 regular expression corresponding to a literal interpretation of the pattern.
-
quotemeta
Given a character string, returns a Perl5 expression that interprets each character of the original string literally. In other words, all special metacharacters are quoted/escaped. This method is useful for converting user input meant for literal interpretation into a safe regular expression representing the literal input.In effect, this method is the analog of the Perl5 quotemeta() builtin method.
- Parameters:
expression
- Expression- Returns:
- A String containing a Perl5 regular expression corresponding to a literal interpretation of the pattern.
-
__isSimpleRepetitionOp
private static boolean __isSimpleRepetitionOp(char ch) -
__isComplexRepetitionOp
private static boolean __isComplexRepetitionOp(char[] ch, int offset) -
__parseRepetition
private static boolean __parseRepetition(char[] str, int off) -
__parseHex
private static int __parseHex(char[] str, int off, int ml, int[] scanned) -
__parseOctal
private static int __parseOctal(char[] str, int off, int ml, int[] scanned) -
__setModifierFlag
private static void __setModifierFlag(char[] flags, char ch) -
__emitCode
private void __emitCode(char code) -
__emitNode
private int __emitNode(char operator) -
__emitArgNode
private int __emitArgNode(char operator, char arg) -
__programInsertOperator
private void __programInsertOperator(char operator, int oper) -
__programAddTail
private void __programAddTail(int current, int value) -
__programAddOperatorTail
private void __programAddOperatorTail(int current, int value) -
__getNextChar
private char __getNextChar() -
__parseAlternation
- Throws:
MalformedPatternException
-
__parseAtom
- Throws:
MalformedPatternException
-
__parseUnicodeClass
- Throws:
MalformedPatternException
-
__parsePOSIX
private char __parsePOSIX(boolean[] negFlag) Parse POSIX epxression like [:foo:].- Returns:
- OpCode. return 0 when fail parsing POSIX expression.
-
__parseBranch
- Throws:
MalformedPatternException
-
__parseExpression
private int __parseExpression(boolean isParenthesized, int[] hintFlags) throws MalformedPatternException - Throws:
MalformedPatternException
-
compile
Compiles a Perl5 regular expression into a Perl5Pattern instance that can be used by a Perl5Matcher object to perform pattern matching. Please see the user's guide for more information about Perl5 regular expressions.- Specified by:
compile
in interfacePatternCompiler
- Parameters:
pattern
- A Perl5 regular expression to compile.options
- A set of flags giving the compiler instructions on how to treat the regular expression. The flags are a logical OR of any number of the five MASK constants. For example:regex = compiler.compile(pattern, Perl5Compiler.CASE_INSENSITIVE_MASK | Perl5Compiler.MULTILINE_MASK);
This says to compile the pattern so that it treats input as consisting of multiple lines and to perform matches in a case insensitive manner.- Returns:
- A Pattern instance constituting the compiled regular expression. This instance will always be a Perl5Pattern and can be reliably casted to a Perl5Pattern.
- Throws:
MalformedPatternException
- If the compiled expression is not a valid Perl5 regular expression.
-
compile
Same as calling compile(pattern, Perl5Compiler.DEFAULT_MASK);- Specified by:
compile
in interfacePatternCompiler
- Parameters:
pattern
- A regular expression to compile.- Returns:
- A Pattern instance constituting the compiled regular expression. This instance will always be a Perl5Pattern and can be reliably casted to a Perl5Pattern.
- Throws:
MalformedPatternException
- If the compiled expression is not a valid Perl5 regular expression.
-
compile
Same as calling compile(pattern, Perl5Compiler.DEFAULT_MASK);- Specified by:
compile
in interfacePatternCompiler
- Parameters:
pattern
- A regular expression to compile.- Returns:
- A Pattern instance constituting the compiled regular expression. This instance will always be a Perl5Pattern and can be reliably casted to a Perl5Pattern.
- Throws:
MalformedPatternException
- If the compiled expression is not a valid Perl5 regular expression.
-
compile
Compiles a Perl5 regular expression into a Perl5Pattern instance that can be used by a Perl5Matcher object to perform pattern matching. Please see the user's guide for more information about Perl5 regular expressions.- Specified by:
compile
in interfacePatternCompiler
- Parameters:
pattern
- A Perl5 regular expression to compile.options
- A set of flags giving the compiler instructions on how to treat the regular expression. The flags are a logical OR of any number of the five MASK constants. For example:regex = compiler.compile("ˆ\\w+\\d+$", Perl5Compiler.CASE_INSENSITIVE_MASK | Perl5Compiler.MULTILINE_MASK);
This says to compile the pattern so that it treats input as consisting of multiple lines and to perform matches in a case insensitive manner.- Returns:
- A Pattern instance constituting the compiled regular expression. This instance will always be a Perl5Pattern and can be reliably casted to a Perl5Pattern.
- Throws:
MalformedPatternException
- If the compiled expression is not a valid Perl5 regular expression.
-