Re: Regular expression help.

Kwok Peng Tuck <[email protected]> Wed, 12 Mar 2003 08:53:39 +0800
Newsgroups gmane.comp.jakarta.oro.user
Message-ID <[email protected]>
 I reworked my stratergy ;  instead of asking for a bunch of lines when 
a certain condition is met I parse it a line at a time, looking for 
certain text like 'type_name: deliver_sm' and getting the required 
lines, one at a time. It may be a lot of patterns to write but they are 
all very simillar and easier for me to understand :) .  Thanks for your 
input anyway.

Kumar, Vasanth wrote:

>It seems that your expression is correct.  Probably you are looking at the result instead of the groups.
>
>I ran TestRegex.java with data.txt as the data you had, and expr.txt as: \s*type_name: deliver_sm\s*([^\f]*)\s*SMPP PDU dump ends.\s*
>
>Below is the result I got.  Note the result of Saved Group 1.
>
>---------------------------------------------------------------------------
>java TestRegex
>Contents: \s*type_name: deliver_sm\s*([^\f]*)\s*SMPP PDU dump ends.\s*
>Contents: 2003-03-07 17:20:33 [6] DEBUG:   type_name: deliver_sm
>{
>    many lines to follow.
>}
>2003-03-07 17:20:33 [6] DEBUG: SMPP PDU dump ends.
>
>
>RESULT:
>Match:    type_name: deliver_sm
>{
>    many lines to follow.
>}
>2003-03-07 17:20:33 [6] DEBUG: SMPP PDU dump ends.
>
>Length: 111
>Groups: 2
>Begin offset: 30
>End offset: 141
>Saved Groups:
>1: {
>    many lines to follow.
>}
>2003-03-07 17:20:33 [6] DEBUG:
>Begin: 26
>End: 90
>
>---------------------------------------------------------------------------
>
>
>-----Original Message-----
>From: Kwok Peng Tuck [mailto:[email protected]]
>Sent: Sunday, March 09, 2003 11:55 PM
>To: [email protected]
>Subject: Regular expression help.
>
>
>I'm trying to use a regular expression to obtain the contents of a text 
>file say  between the start and end (which can occur many times in the 
>file):
>
>2003-03-07 17:20:33 [6] DEBUG:   type_name: deliver_sm
>{
>    many lines to follow.
>}
>2003-03-07 17:20:33 [6] DEBUG: SMPP PDU dump ends.
>
>
>
>But the result doesn't seem to work, and will continue on until the end 
>of the file.
>Is there something wrong with my pattern ?  My pattern looks like this :
>
>String pattern = "\\s*type_name: deliver_sm\\s*([^\\f]*)\\s*SMPP PDU 
>dump ends.\\s*"
>I'm using the Perl5Compiler. What can I do to correct the pattern ? I'm 
>kind of new at this.
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: [email protected]
>For additional commands, e-mail: [email protected]
>
>  
>
>------------------------------------------------------------------------
>
>import java.util.*;
>import java.io.*;
>
>import org.apache.oro.text.regex.PatternMatcher;
>import org.apache.oro.text.regex.PatternCompiler;
>import org.apache.oro.text.regex.Pattern;
>import org.apache.oro.text.regex.PatternMatcherInput;
>import org.apache.oro.text.regex.MatchResult;
>import org.apache.oro.text.regex.Util;
>import org.apache.oro.text.regex.Perl5Compiler;
>import org.apache.oro.text.regex.StringSubstitution;
>import org.apache.oro.text.regex.Perl5Matcher;
>import org.apache.oro.text.regex.MalformedPatternException;
>
>public class TestRegex
>{
>  public static void main(String[] args)
>  {
>    try
>    {
>      PatternMatcher oroMatcher;
>      PatternCompiler oroCompiler;
>      Pattern oroPattern;
>      PatternMatcherInput oroInput;
>
>      String sExpr = readDataFromFile("expr.txt");
>      String sData = readDataFromFile("data.txt");
>      
>      oroCompiler = new Perl5Compiler();
>      oroMatcher  = new Perl5Matcher();
>
>//  oroPattern = oroCompiler.compile(sExpr, Perl5Compiler.CASE_INSENSITIVE_MASK);
>
>      try
>      {
>        oroPattern = oroCompiler.compile(sExpr);
>      }
>      catch(MalformedPatternException e)
>      {
>        throw new Exception("Bad pattern.", e);
>      }
>
>      oroInput = new PatternMatcherInput(sData);
>
>      while (oroMatcher.contains(oroInput, oroPattern))
>      {
>        System.out.println();
>        System.out.println("RESULT:");
>        MatchResult result = oroMatcher.getMatch();
>        // Perform whatever processing on the result you want.
>        // Here we just print out all its elements to show how its
>        // methods are used.
>        
>        System.out.println("Match: " + result.toString());
>        System.out.println("Length: " + result.length());
>        int groups = result.groups();
>        System.out.println("Groups: " + groups);
>        System.out.println("Begin offset: " + result.beginOffset(0));
>        System.out.println("End offset: " + result.endOffset(0));
>        System.out.println("Saved Groups: ");
>        
>        // Start at 1 because we just printed out group 0
>        for (int group = 1; group < groups; group++)
>        {
>          System.out.println(group + ": " + result.group(group));
>          System.out.println("Begin: " + result.begin(group));
>          System.out.println("End: " + result.end(group));
>        }
>      }
>    }
>    catch (Exception e)
>    {
>      e.printStackTrace();
>      System.out.println(e);
>      StackTraceElement[] stackTraceArray = e.getStackTrace();
>      System.out.println("Size = " + stackTraceArray.length);
>      for (int i = 0; i < stackTraceArray.length; i++)
>      {
>        StackTraceElement element = stackTraceArray[i];
>        System.out.println("Class: " + element.getClassName());
>        System.out.println("File: " + element.getFileName());
>        System.out.println("Line: " + element.getLineNumber());
>        System.out.println("Method: " + element.getMethodName());
>        System.out.println(element.toString());
>        System.out.println("--------------------------------------------------------------");
>      }
>    }
>  }
>  
>  static String readDataFromFile(String filename) throws Exception
>  {
>    final int bufferSize = 80;
>    Reader reader;
>    
>    try
>    {
>      reader = new FileReader(filename);
>    }
>    catch (FileNotFoundException e)
>    {
>      throw new Exception("Error opening filename: " + filename, e);
>    }
>
>    char[] charBuffer = new char[bufferSize];
>    StringBuffer strBuf = new StringBuffer();
>    
>    try
>    {
>      int amountRead = reader.read(charBuffer, 0, bufferSize);
>      
>      while (amountRead != -1)
>      {
>        strBuf.append(charBuffer, 0, amountRead);
>        amountRead = reader.read(charBuffer, 0, bufferSize);
>      }
>    }
>    catch (IOException e)
>    {
>      throw new Exception("Error while reading file: " + filename, e);
>    }
>
>    System.out.println("Contents: " + strBuf.toString());
>    return strBuf.toString();
>  }
>
>}
>  
>
>------------------------------------------------------------------------
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: [email protected]
>For additional commands, e-mail: [email protected]
>