Java/Regular Expressions/Lookup

Материал из Java эксперт
Перейти к: навигация, поиск

Java Regular Expression : File and Find

   <source lang="java">

/* From http://java.sun.ru/docs/books/tutorial/index.html */ /*

* Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* -Redistribution of source code must retain the above copyright notice, this
*  list of conditions and the following disclaimer.
*
* -Redistribution in binary form must reproduce the above copyright notice,
*  this list of conditions and the following disclaimer in the documentation
*  and/or other materials provided with the distribution.
*
* Neither the name of Sun Microsystems, Inc. or the names of contributors may
* be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* This software is provided "AS IS," without a warranty of any kind. ALL
* EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING
* ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
* OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MIDROSYSTEMS, INC. ("SUN")
* AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE
* AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
* DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST
* REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,
* INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY
* OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
*
* You acknowledge that this software is not designed, licensed or intended
* for use in the design, construction, operation or maintenance of any
* nuclear facility.
*/

import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; public final class RegexTestHarness {

 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) {
   }
   pattern = Pattern.rupile(REGEX);
   matcher = pattern.matcher(INPUT);
   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) {
   }
 }

}


      </source>
   
  
 
  



Java Regular Expression : find 2

   <source lang="java">

/* From http://java.sun.ru/docs/books/tutorial/index.html */ /*

* Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* -Redistribution of source code must retain the above copyright notice, this
*  list of conditions and the following disclaimer.
*
* -Redistribution in binary form must reproduce the above copyright notice,
*  this list of conditions and the following disclaimer in the documentation
*  and/or other materials provided with the distribution.
*
* Neither the name of Sun Microsystems, Inc. or the names of contributors may
* be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* This software is provided "AS IS," without a warranty of any kind. ALL
* EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING
* ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
* OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MIDROSYSTEMS, INC. ("SUN")
* AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE
* AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
* DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST
* REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,
* INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY
* OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
*
* You acknowledge that this software is not designed, licensed or intended
* for use in the design, construction, operation or maintenance of any
* nuclear facility.
*/

import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; 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.rupile(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) {
   }
 }

}


      </source>
   
  
 
  



Negative Look ahead

   <source lang="java">

import java.util.regex.Matcher; import java.util.regex.Pattern; public class NegativeLookaheadExample {

 public static void main(String args[]) throws Exception {
   String regex = "John (?!Smith)[A-Z]\\w+";
   Pattern pattern = Pattern.rupile(regex);
   String candidate = "I think that John Smith ";
   candidate += "is a fictional character. His real name ";
   candidate += "might be John Jackson, John Westling, ";
   candidate += "or John Holmes for all we know.";
   Matcher matcher = pattern.matcher(candidate);
   String tmp = null;
   while (matcher.find()) {
     tmp = matcher.group();
     System.out.println("MATCH:" + tmp);
   }
 }

}

      </source>
   
  
 
  



Positive Look ahead

   <source lang="java">

import java.util.regex.Matcher; import java.util.regex.Pattern; public class PositiveLookaheadExample {

 public static void main(String args[]) {
   String regex = "(?=^255).*";
   Pattern pattern = Pattern.rupile(regex);
   String candidate = "255.0.0.1";
   Matcher matcher = pattern.matcher(candidate);
   String ip = "not found";
   if (matcher.find())
     ip = matcher.group();
   String msg = "ip: " + ip;
   System.out.println(msg);
 }

}

      </source>
   
  
 
  



Positive Look behind 1

   <source lang="java">

import java.util.regex.Matcher; import java.util.regex.Pattern; public class PositiveLookBehindExample {

 public static void main(String args[]) throws Exception {
   String regex = "(?<=http://)\\S+";
   Pattern pattern = Pattern.rupile(regex);
   String candidate = "The jexp website can be found at ";
   candidate += "http://www.jexp.ru. There, ";
   candidate += "you can find some Java examples.";
   Matcher matcher = pattern.matcher(candidate);
   while (matcher.find()) {
     String msg = ":" + matcher.group() + ":";
     System.out.println(msg);
   }
 }

}

      </source>
   
  
 
  



Positive Look Behind 2

   <source lang="java">

import java.util.regex.Matcher; import java.util.regex.Pattern; public class PositiveLookBehindExample {

 public static void main(String args[]) throws Exception {
   String regex = "(?<=http://)\\S+";
   Pattern pattern = Pattern.rupile(regex);
   String candidate = "The jexp website can be found at ";
   candidate += "http://www.jexp.ru. There, ";
   candidate += "you can find some best example code for Java.";
   Matcher matcher = pattern.matcher(candidate);
   while (matcher.find()) {
     String msg = ":" + matcher.group() + ":";
     System.out.println(msg);
   }
 }

}

      </source>
   
  
 
  



Positive Look Behind 3

   <source lang="java">

import java.util.regex.Matcher; import java.util.regex.Pattern; public class PositiveLookBehindExample {

 public static void main(String args[]) throws Exception {
   String regex = "(?<=http://)\\S+";
   Pattern pattern = Pattern.rupile(regex);
   String candidate = "The jexp website can be found at ";
   candidate += "http://www.jexp.ru. There, ";
   candidate += "you can find information about some of ";
   candidate += "best example codes";
   Matcher matcher = pattern.matcher(candidate);
   while (matcher.find()) {
     String msg = ":" + matcher.group() + ":";
     System.out.println(msg);
   }
 }

}


      </source>
   
  
 
  



Regular Expression: find

   <source lang="java">

/* From http://java.sun.ru/docs/books/tutorial/index.html */ /*

* Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* -Redistribution of source code must retain the above copyright notice, this
*  list of conditions and the following disclaimer.
*
* -Redistribution in binary form must reproduce the above copyright notice,
*  this list of conditions and the following disclaimer in the documentation
*  and/or other materials provided with the distribution.
*
* Neither the name of Sun Microsystems, Inc. or the names of contributors may
* be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* This software is provided "AS IS," without a warranty of any kind. ALL
* EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING
* ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
* OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MIDROSYSTEMS, INC. ("SUN")
* AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE
* AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
* DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST
* REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,
* INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY
* OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
*
* You acknowledge that this software is not designed, licensed or intended
* for use in the design, construction, operation or maintenance of any
* nuclear facility.
*/

import java.util.regex.Matcher; import java.util.regex.Pattern; public final class MatcherTest {

 private static final String REGEX = "\\bdog\\b";
 private static final String INPUT = "dog dog dog doggie dogg";
 public static void main(String[] argv) {
   Pattern p = Pattern.rupile(REGEX);
   Matcher m = p.matcher(INPUT); // get a matcher object
   int count = 0;
   while (m.find()) {
     count++;
     System.out.println("Match number " + count);
     System.out.println("start(): " + m.start());
     System.out.println("end(): " + m.end());
   }
 }

}


      </source>