I have an following program, that leads to java.lang.StackOverflowError
import org.apache.regexp.RE;
public class RegexpTest {
public static void main(String[] args) {
System.out.println("START");
String str =
"506c61746261207a61206eec636f20646f737420646f6272fd686f"+
"506c61746261207a61206eec636f20646f737420646f6272fd686f"+
"506c61746261207a61206eec636f20646f737420646f6272fd686f"
+"506c61746261207a61206eec636f20646f737420646f6272fd686f"
+"506c61746261207a61206eec636f20646f737420646f6272fd686f"
+"506c61746261207a61206eec636f20646f737420646f6272fd686f"
+"506c61746261207a61206eec636f20646f737420646f6272fd686f"
+"506c61746261207a61206eec636f20646f737420646f6272fd686f"
+"506c61746261207a61206eec636f20646f737420646f6272fd686f"
+"506c61746261207a61206eec636f20646f737420646f6272fd686f"
+"506c61746261207a61206eec636f20646f737420646f6272fd686f"
+"506c61746261207a61206eec636f20646f737420646f6272fd686f"
+"506c61746261207a61206eec636f20646f737420646f6272fd686f"
+"506c61746261207a61206eec636f20646f737420646f6272fd686f";
String regexpString =
"(((([:alpha:]|[:digit:])+)\\.){1,2})"; // <-- almost smallest construction, that
leads to problems
for (int i = 0; i < str.length(); i+=10) {
String sub = str.substring(0, i);
RE r = new RE(regexpString);
long ts = System.currentTimeMillis();
r.match(sub);
System.out.println("Matching [" + i + "] TIME: " +
(System.currentTimeMillis() - ts));
}
}
}
It seems to me, that regexp implementatiopn shouldn't use recursion but it
should use finite automata. But both apache implementation and Sun
one lead to problems (the Sun one seems to have exponential time requirements
in some similar cases).
I'm not sure what to do. Is there an regexp implementation, that works OK
in all cases or should I learn some patterns, that cause troubles and not to
use them. Or should I create an implementetion, that works fine? :) Or do
I do some trivial bug I haven't notice?
--
S pozdravem
Ondrej Nekola
[EMAIL PROTECTED]
http://www.matfyz.cz/ondra
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]