RE: Infinite Loop or Just taking too long ?
"Kumar, Vasanth" <[email protected]> Tue, 25 Feb 2003 17:06:56 -0500
| Newsgroups | gmane.comp.jakarta.oro.user |
|---|---|
| Message-ID | <F500BDA6D2EAD311AD5B00508BCF2DF304CB1A4A@iwexchange1.na.interworld.com> |
Sorry, it seems that my attachment didn't make it through in my prior email. And here is how I ran it: java TestRegex ^[A-Za-z0-9#_!'\(\)\-]+([A-Za-z0-9#_!'\(\)\.\-]+)*@[A-Za-z0-9#_!'\(\)\-]+[\.]+([AZa-z0-9#_!'\(\)\.\-]+)+$ abcdefghijklmnopqrstuvwxyz1234567890@yahoo. -----Original Message----- From: Kumar, Vasanth Sent: Tuesday, February 25, 2003 4:56 PM To: [email protected] Subject: Infinite Loop or Just taking too long ? Hi, We use ORO in our application for to provide regular expression capability. One of our users had created an email validation expression as follows: ^[A-Za-z0-9#_!'\(\)\-]+([A-Za-z0-9#_!'\(\)\.\-]+)*@[A-Za-z0-9#_!'\(\)\-]+[\.]+([AZa-z0-9#_!'\(\)\.\-]+)+$ As you can see, this is inefficient and can be simplified to (at least) the following: ^[A-Za-z0-9#_!'\(\)\-]+[A-Za-z0-9#_!'\(\)\.\-]*@[A-Za-z0-9#_!'\(\)\-]+[\.]+[AZa-z0-9#_!'\(\)\.\-]+$ However, the original expression seems to hang ORO when given a long, invalid, email. (Though I must admit I don't know whether it is hanging or just taking a really long time.) An example of an email that seems to slow it down/hang is: abcdefghijklmnopqrstuvwxyz1234567890@yahoo. Note that valid emails are evaluated successfully (i.e. [email protected] doesn't hang ORO). I am enclosing my test case as well. This seems to be an issue in the latest version - 2.0.7. --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
TestRegex.java.txt
(text/plain, 1.6 KB)
import java.util.*;
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 = args[0];
String sData = args[1];
oroCompiler = new Perl5Compiler();
oroMatcher = new Perl5Matcher();
oroPattern = oroCompiler.compile(sExpr, Perl5Compiler.CASE_INSENSITIVE_MASK);
MatchResult oroResult;
oroInput = new PatternMatcherInput(sData);
if (oroMatcher.contains(oroInput, oroPattern))
{
System.out.println("Match");
oroResult = oroMatcher.getMatch();
int totalGroups = oroResult.groups();
for(int groupNum = 0; groupNum < totalGroups; groupNum++)
{
System.out.println("match: " + oroResult.group(groupNum));
}
}
else
{
System.out.println("No match");
}
}
catch (Exception e)
{
e.printStackTrace();
System.out.println(e);
}
}
}