Tag: lookahead

使用RegEx匹配大输入时的StackOverflowError

使用RegEx模式匹配结果时,我得到了StackOverflowError 。 模式是(\d\*?(;(?=\d))?)+ 。 此正则表达式用于validation输入: 12345;4342;234*;123*;344324 输入是一个字符串,由值(仅数字)分隔; 。 每个值最后可以包含一个* (用作其他匹配的通配符)。 没有; 在字符串的末尾。 问题是这个正则表达式工作正常,少数值。 但是当值的数量太大(超过300)时,它将导致StackOverflowError 。 final String TEST_REGEX = “(\\d\\*?(;(?=\\d))?)+”; // Generate string StringBuilder builder = new StringBuilder(); int number = 123456; for (int count = 1; count <= 300; count++) { builder.append(Integer.toString(number).concat(";")); number++; } builder.deleteCharAt(builder.lastIndexOf(";")) builder.toString().matches(TEST_REGEX); //<———- StackOverflowError 和堆栈跟踪: java.lang.StackOverflowError at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3715) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556) […]