001: /*
002: * $Id: matchesContainsExample.java,v 1.7 2003/11/07 20:16:23 dfs Exp $
003: *
004: * ====================================================================
005: * The Apache Software License, Version 1.1
006: *
007: * Copyright (c) 2000 The Apache Software Foundation. All rights
008: * reserved.
009: *
010: * Redistribution and use in source and binary forms, with or without
011: * modification, are permitted provided that the following conditions
012: * are met:
013: *
014: * 1. Redistributions of source code must retain the above copyright
015: * notice, this list of conditions and the following disclaimer.
016: *
017: * 2. Redistributions in binary form must reproduce the above copyright
018: * notice, this list of conditions and the following disclaimer in
019: * the documentation and/or other materials provided with the
020: * distribution.
021: *
022: * 3. The end-user documentation included with the redistribution,
023: * if any, must include the following acknowledgment:
024: * "This product includes software developed by the
025: * Apache Software Foundation (http://www.apache.org/)."
026: * Alternately, this acknowledgment may appear in the software itself,
027: * if and wherever such third-party acknowledgments normally appear.
028: *
029: * 4. The names "Apache" and "Apache Software Foundation", "Jakarta-Oro"
030: * must not be used to endorse or promote products derived from this
031: * software without prior written permission. For written
032: * permission, please contact apache@apache.org.
033: *
034: * 5. Products derived from this software may not be called "Apache"
035: * or "Jakarta-Oro", nor may "Apache" or "Jakarta-Oro" appear in their
036: * name, without prior written permission of the Apache Software Foundation.
037: *
038: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
039: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
040: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
041: * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
042: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
043: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
044: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
045: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
046: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
047: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
048: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
049: * SUCH DAMAGE.
050: * ====================================================================
051: *
052: * This software consists of voluntary contributions made by many
053: * individuals on behalf of the Apache Software Foundation. For more
054: * information on the Apache Software Foundation, please see
055: * <http://www.apache.org/>.
056: */
057:
058: package examples;
059:
060: import org.apache.oro.text.regex.*;
061:
062: /**
063: * This is a test program demonstrating the difference between the
064: * matches() and contains() methods.
065: *
066: * @version @version@
067: */
068: public final class matchesContainsExample {
069:
070: /**
071: * A common mistake is to confuse the behavior of the matches() and
072: * contains() methods. matches() tests to see if a string exactly
073: * matches a pattern whereas contains() searches for the first pattern
074: * match contained somewhere within the string. When used with a
075: * PatternMatcherInput instance, the contains() method allows you to
076: * search for every pattern match within a string by using a while loop.
077: */
078: public static final void main(String args[]) {
079: int matches = 0;
080: String numberExpression = "\\d+";
081: String exactMatch = "2010";
082: String containsMatches = " 2001 was the movie before 2010, which takes place before 2069 the book ";
083: Pattern pattern = null;
084: PatternMatcherInput input;
085: PatternCompiler compiler;
086: PatternMatcher matcher;
087: MatchResult result;
088:
089: // Create Perl5Compiler and Perl5Matcher instances.
090: compiler = new Perl5Compiler();
091: matcher = new Perl5Matcher();
092:
093: // Attempt to compile the pattern. If the pattern is not valid,
094: // report the error and exit.
095: try {
096: pattern = compiler.compile(numberExpression);
097: } catch (MalformedPatternException e) {
098: System.err.println("Bad pattern.");
099: System.err.println(e.getMessage());
100: System.exit(1);
101: }
102:
103: // Here we show the difference between the matches() and contains()
104: // methods(). Compile the program and study the output to reinforce
105: // in your mind what the methods do.
106:
107: System.out.println("Input: " + exactMatch);
108:
109: // The following should return true because exactMatch exactly matches
110: // numberExprssion.
111:
112: if (matcher.matches(exactMatch, pattern))
113: System.out.println("matches() Result: TRUE, EXACT MATCH");
114: else
115: System.out
116: .println("matches() Result: FALSE, NOT EXACT MATCH");
117:
118: System.out.println("\nInput: " + containsMatches);
119:
120: // The following should return false because containsMatches does not
121: // exactly match numberExpression even though its subparts do.
122:
123: if (matcher.matches(containsMatches, pattern))
124: System.out.println("matches() Result: TRUE, EXACT MATCH");
125: else
126: System.out
127: .println("matches() Result: FALSE, NOT EXACT MATCH");
128:
129: // Now we call the contains() method. contains() should return true
130: // for both strings.
131:
132: System.out.println("\nInput: " + exactMatch);
133:
134: if (matcher.contains(exactMatch, pattern)) {
135: System.out.println("contains() Result: TRUE");
136:
137: // Fetch match and print.
138: result = matcher.getMatch();
139: System.out.println("Match: " + result);
140: } else
141: System.out.println("contains() Result: FALSE");
142:
143: System.out.println("\nInput: " + containsMatches);
144:
145: if (matcher.contains(containsMatches, pattern)) {
146: System.out.println("contains() Result: TRUE");
147: // Fetch match and print.
148: result = matcher.getMatch();
149: System.out.println("Match: " + result);
150: } else
151: System.out.println("contains() Result: FALSE");
152:
153: // In the previous example, notice how contains() will fetch only first
154: // match in a string. If you want to search a string for all of the
155: // matches it contains, you must create a PatternMatcherInput object
156: // to keep track of the position of the last match, so you can pick
157: // up a search where the last one left off.
158:
159: input = new PatternMatcherInput(containsMatches);
160:
161: System.out.println("\nPatternMatcherInput: " + input);
162: // Loop until there are no more matches left.
163: while (matcher.contains(input, pattern)) {
164: // Since we're still in the loop, fetch match that was found.
165: result = matcher.getMatch();
166:
167: ++matches;
168:
169: System.out.println("Match " + matches + ": " + result);
170: }
171: }
172: }
|