Start of Tutorial > Start of Trail > Start of Lesson |
Search
Feedback Form |
APatternSyntaxException
is an unchecked exception that indicates a syntax error in a regular expression pattern. ThePatternSyntaxException
class provides the following methods to help you determine what went wrong:The following source code,
public String getDescription()
: Retrieves the description of the error.public int getIndex()
: Retrieves the error index.public String getPattern()
: Retrieves the erroneous regular-expression pattern.public String getMessage()
: Returns a multi-line string containing the description of the syntax error and its index, the erroneous regular-expression pattern, and a visual indication of the error index within the pattern.RegexTestHarness2
, updates our test harness to check for malformed regular expressions. It intentionally introduces a syntax error, then examines the caught exception using the methods listed above. Changes are marked in bold.To run this test, change the fileimport java.io.*; import java.util.regex.*; public final class RegexTestHarness2 { private static String REGEX; private static String INPUT; private static BufferedReader br; private static Pattern pattern; private static Matcher matcher; private static boolean found; public static void main(String[] argv) { initResources(); processTest(); closeResources(); } private static void initResources() { try { br = new BufferedReader(new FileReader("regex.txt")); } catch (FileNotFoundException fnfe) { System.out.println("Cannot locate input file! "+fnfe.getMessage()); System.exit(0); } try { REGEX = br.readLine(); INPUT = br.readLine(); } catch (IOException ioe) {} try { pattern = Pattern.compile(REGEX); matcher = pattern.matcher(INPUT); } catch(PatternSyntaxException pse) { System.out.println("There is a problem with the regular expression!"); System.out.println("The pattern in question is: "+pse.getPattern()); System.out.println("The description is: "+pse.getDescription()); System.out.println("The message is: "+pse.getMessage()); System.out.println("The index is: "+pse.getIndex()); System.exit(0); } System.out.println("Current REGEX is: "+REGEX); System.out.println("Current INPUT is: "+INPUT); } private static void processTest() { while(matcher.find()) { System.out.println("I found the text \"" + matcher.group() + "\" starting at index " + matcher.start() + " and ending at index " + matcher.end() + "."); found = true; } if(!found){ System.out.println("No match found."); } } private static void closeResources() { try{ br.close(); }catch(IOException ioe){} } }regex.txt
to contain?i)foo
as its first line, andFoO
as its second line. This mistake is a common scenario in which the programmer has forgotten the opening parenthesis in the embedded flag expression(?i)
.From this output, we can see that the syntax error is a dangling metacharacter (the question mark) at index 0. A missing opening parenthesis is the culprit.OUTPUT: There is a problem with the regular expression! The pattern in question is: ?i)foo The description is: Dangling meta character '?' The message is: Dangling meta character '?' near index 0 ?i)foo ^ The index is: 0
Start of Tutorial > Start of Trail > Start of Lesson |
Search
Feedback Form |
Copyright 1995-2004 Sun Microsystems, Inc. All rights reserved.