正则表达式的问题

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中,用正则表达式要注意哪些特殊符号呢
...全文
217 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
低调的小青蛙 2006-03-14
  • 打赏
  • 举报
回复
{1,10000}

其实选择 10000 是随意的,就是选一个大一点的,没必要太大
soho00222 2006-03-14
  • 打赏
  • 举报
回复
tt
soho00222 2006-03-14
  • 打赏
  • 举报
回复
那"+"号用什么代替?
低调的小青蛙 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,讲得很详细
如果要找错,楼主不妨把代码多贴一点

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧