求获取href值的正则表达式?

freedy_hu 2005-12-22 11:39:59
html的写法不严格,现有:
String htmlStr = null;
htmlStr = "<a asdf href=\"www.abc.com.cn/a/b.jsp?name=value\" asfd >连接</a>";
htmlStr = "<a asdf href = \"www.abc.com.cn/a/b.jsp?name=value\" asfd >连接</a>";
htmlStr = "<a asdf href='www.abc.com.cn/a/b.jsp?name=value' asfd >连接</a>";
htmlStr = "<a asdf href = 'www.abc.com.cn/a/b.jsp?name=value' asfd >连接</a>";
htmlStr = "<a asdf href=www.abc.com.cn/a/b.jsp?name=value asfd >连接</a>";
htmlStr = "<a asdf href = www.abc.com.cn/a/b.jsp?name=value asfd >连接</a>";

如何写出一个针对上面几种href学法的正则表达式获取href的值?谢谢!
...全文
1262 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
masse 2005-12-22
  • 打赏
  • 举报
回复
http://www.regexlib.com/Search.aspx
这里输入href进行搜索,
masse 2005-12-22
  • 打赏
  • 举报
回复
http://www.regexlib.com/DisplayPatterns.aspx?cattabindex=1&categoryId=2
freedy_hu 2005-12-22
  • 打赏
  • 举报
回复
等到:www.abc.com.cn/a/b.jsp?name=value
skycncomp 2005-12-22
  • 打赏
  • 举报
回复
得到什么样的值??
freedy_hu 2005-12-22
  • 打赏
  • 举报
回复
这么写基本可以解决:

regExp = "(<a[\\s+]*([^>h]|h(?!ref\b))*href[\\s+]*=[\\s+]*[('|\")]?)([^(\\s+|'|\")]*)([^>]*>)";

谢谢上面几位,马上给分!

skycncomp 2005-12-22
  • 打赏
  • 举报
回复
什么地方不行?
freedy_hu 2005-12-22
  • 打赏
  • 举报
回复
楼上写法不行
freedy_hu 2005-12-22
  • 打赏
  • 举报
回复
我要对:

String htmlStr = null;
htmlStr = "<a asdf href=\"www.abc.com.cn/a/b.jsp?name=value\" asfd >连接</a>";
htmlStr = "<a asdf href = \"www.abc.com.cn/a/b.jsp?name=value\" asfd >连接</a>";
htmlStr = "<a asdf href='www.abc.com.cn/a/b.jsp?name=value' asfd >连接</a>";
htmlStr = "<a asdf href = 'www.abc.com.cn/a/b.jsp?name=value' asfd >连接</a>";
htmlStr = "<a asdf href=www.abc.com.cn/a/b.jsp?name=value asfd >连接</a>";
htmlStr = "<a asdf href = www.abc.com.cn/a/b.jsp?name=value asfd >连接</a>";

这几种情况(可能还有,因为html格式不严格),中的href对应的URL取出作替换,所以想通过
正则表达式作替换。楼上的写法,我测试一下,解决了给分,不够重新开帖。谢先了!
skycncomp 2005-12-22
  • 打赏
  • 举报
回复
htmlStr.substring(m.start()+1, m.end())
这样可以去掉等号,不知道是否可以满足要求

skycncomp 2005-12-22
  • 打赏
  • 举报
回复
public void test() {
//www.abc.com.cn/a/b.jsp?name=value
String htmlStr = null;
htmlStr = "<a asdf href=\"www.abc.com.cn/a/b.jsp?name=value\" asfd >连接</a>";
// htmlStr = "<a asdf href = \"www.abc.com.cn/a/b.jsp?name=value\" asfd >连接</a>";
// htmlStr = "<a asdf href='www.abc.com.cn/a/b.jsp?name=value' asfd >连接</a>";
// htmlStr = "<a asdf href = 'www.abc.com.cn/a/b.jsp?name=value' asfd >连接</a>";
// htmlStr = "<a asdf href=www.abc.com.cn/a/b.jsp?name=value asfd >连接</a>";
// htmlStr = "<a asdf href = www.abc.com.cn/a/b.jsp?name=value asfd >连接</a>";

String rex = "=.*=[\\w|\'|\"]*";
Pattern p = Pattern.compile(rex);
Matcher m = p.matcher(htmlStr);
if (m.find())
System.out.println(m.group());
}

有两点还没解决,
1、每一个多一个等号
2、等号后面如果是空格没法去掉,我加\\s好像不起作用.
freedy_hu 2005-12-22
  • 打赏
  • 举报
回复
htmlStr = "<a asdf href=\"www.abc.com.cn/a/b.jsp?name=value\" asfd >连接</a>";
htmlStr = "<a asdf href = \"www.abc.com.cn/a/b.jsp?name=value\" asfd >连接</a>";
htmlStr = "<a asdf href='www.abc.com.cn/a/b.jsp?name=value' asfd >连接</a>";
htmlStr = "<a asdf href = 'www.abc.com.cn/a/b.jsp?name=value' asfd >连接</a>";
可以用:
regExp2 = "(<a\\s+([^>h]|h(?!ref\b))*href[\\s+]?=[\\s+]?('|\"))([^(\\s+|'|\")]*)([^>]*>)";
得到:www.abc.com.cn/a/b.jsp?name=value

那么:

htmlStr = "<a asdf href=www.abc.com.cn/a/b.jsp?name=value asfd >连接</a>";与
htmlStr = "<a asdf href = www.abc.com.cn/a/b.jsp?name=value asfd >连接</a>";

如何用正则表达式得到:www.abc.com.cn/a/b.jsp?name=value

62,634

社区成员

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

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