1. 正则表达式测试网站
https://tool.oschina.net/regex
2. 问题描述:
需要解析的文本:把href里的内容提取出来 //jiadian.jd.com
<a target="_blank" class="cate_menu_lk" href="//jiadian.jd.com">家用电器</a>
表达式:
XXX.regex("(?<=<a.*href=\")\\S+(?=\")");
报错:
Caused by: java.util.regex.PatternSyntaxException: Look-behind group does not have an obvious maximum length near index 13
(?<=<a.*href=")\S+(?=")
^
该报错说的是:后向组在索引13附近没有明显的最大长度
即Java的正则表达式引擎不支持可变长度外观。这意味着当后面的长度不固定时,引擎将抛出此异常。
3. 正确写法
把 .* 换成 .{0,100}
XXX.regex("(?<=<a.{0,50}href=\")\\S+(?=\")");
.{0,50} 表示任意字符至少匹配0次,至多匹配50次