正则表达式的问题

soho00222 2006-03-14 02:24:42
正则表达式的字符为
(?<=(<a href=.*sbl.lasso\?query=SBL(\d+).*>))(SBL\d+).*(?=\</a>)

报错,java.util.regex.PatternSyntaxException: Look-behind
group does not have an obvious maximum length near index 43

43的位置为")"
这段正则表达式有 问题吗?请指教,在JAVA中,用正则表达式要注意哪些特殊符号呢
...全文
181 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
{1,10000}

其实选择 10000 是随意的,就是选一个大一点的,没必要太大
回复
soho00222 2006-03-14
tt
回复
soho00222 2006-03-14
那"+"号用什么代替?
回复
搂主的问题我遇到过,这是 java 的正则表达式的原因,算不上错误。

java 的正则表达式中,反向预搜索(?<=xxxxxx)中的表达式,不能有 "*", "+" 等能匹配无限长度的表达式。搂主只能使用 ".{0,10000}" 来代替 ".*"

搂主的表达式本身没有问题,只是 java 的正则表达式有这个局限。

更多关于正则表达式的讲解与举例,参考文章:
http://www.regexlab.com/zh/regref.htm
回复
soho00222 2006-03-14
把"\"换成"\\"了
回复
soho00222 2006-03-14
public static String getBody(String html) throws Exception {
String sblregex = "(?<=(<a href=.*sbl.lasso\\?query=SBL(\\d+).*>))(SBL\\d+).*(?=\\</a>)";
System.out.print(sblregex);
Pattern pattern = Pattern.compile(sblregex);
Matcher m = pattern.matcher(html);// 理解成创建匹配器

boolean result;
result = m.find();
int i = 0;
while (result) {
i++;
for (int j = 1; j <= m.groupCount(); j++) {
System.out.println("匹配结果" + i + "" + m.group(j));
}
// 继续查找下一个匹配对象
result = m.find();
}

return html;

}
回复
believefym 2006-03-14
java.util.regex.Pattern
回复
believefym 2006-03-14
关于正则式具体可以看java.util.Pattern的api doc,讲得很详细
如果要找错,楼主不妨把代码多贴一点
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2006-03-14 02:24
社区公告
暂无公告