ArrayList linkLocal    = new ArrayList(); 
ArrayList linkExternal = new ArrayList(); 
// Dodgy Regex will find *some* links 
foreach (Match match in Regex.Matches(htmlData 
    , @"(?<=<(a|area)\s+href="").*?(?=""\s*/?>)" 
    , RegexOptions.IgnoreCase|RegexOptions.ExplicitCapture)) 

    // Regex matches from opening "quote
    link = match.Value;
    // find first space (ie no spaces in Url)
    int spacePos = link.IndexOf(' ');
    // or first closing quote (NO single quotes) 
    int quotePos = link.IndexOf('"');
    int chopPos = (quotePos<spacePos?quotePos:spacePos);
    if (chopPos > 0) {
    // chopPos if quote or space first the at URL end
        link = link.Substring(0,chopPos);
    } 
    if ( (link.Length > 8) && 
         (link.Substring(0, 7).ToLower() == "http://") ) {
        // Assumes all links beginning with http:// are _external_ 
        linkExternal.Add(link) ; 
    } else 
        // otherwise they're "relative"/internal links
        // so we concatenate the base URL 
        link = startingUrl + link; 
        linkLocal.Add(link); 
    } 
}

.*? 非贪婪或最小匹配.
?<= 正向引用不包含在匹配值里
?= 同上.. (不过上面的哪个没有了<号就会造成不同的结果了)
"" 因为前面加了个@ 所以这边的""变成了"的意思.
(a|area) 其它的任意一个

RegexOptions.ExplicitCapture 指得没有命名的不能捕获..其它?<=和?=以经代替了它的作用了

另一种方法的捕狱.括号加命名 (?<banyi>.*?)到时候就可以match.Groups["banyi"].Value这种形式来获得了 Replace的时候也可以指定的
?的另一个作用就是 匹配0次或一次了 +号是一次或多次*号是0次或多次

转载于:https://www.cnblogs.com/lovebanyi/archive/2005/10/29/264478.html

href 一个正则表达式的解析 ? 号解析相关推荐

  1. 正则表达式 bs4解析 xpath解析

    #正则 #bs4 解析 #Xpath解析 正则  re import re# list = re.findall(r'\d{11}','我的电话号码是:18047653655,女朋友的电话号码是:15 ...

  2. 【6】爬虫介绍/准备工作/构建流程/获取数据/BeautifulSoup/Re(正则表达式)/正则提取/标签解析/保存数据到excel

    爬虫介绍/准备工作/构建流程/获取数据/BeautifulSoup/Re(正则表达式)/正则提取/标签解析/保存数据到excel 更新时间:2021.9.16 vedio:15,16,17,18,19 ...

  3. 爬虫之网络数据解析的三种方式---正则表达式、XPath数据解析库、BeautifulSoup数据解析库

    1.正则表达式 爬虫的四个主要步骤: 明确目标(要知道你准备取哪个范围或者网站上取搜索) 爬(将所有网站的内容全部爬下来) 取(取掉对我们没用的数据) 处理数据(按照我们想要的方式存储和使用) 什么是 ...

  4. python编写登录_通过Python编写一个简单登录功能过程解析

    通过Python编写一个简单登录功能过程解析 需求: 写一个登录的程序, 1.最多登陆失败3次 2.登录成功,提示欢迎xx登录,今天的日期是xxx,程序结束 3.要检验输入是否为空,账号和密码不能为空 ...

  5. RabbitMQ端口号解析

    一.端口号解析 1.4369 (epmd), 25672 (Erlang distribution) 2.5672, 5671 (AMQP 0-9-1 without and with TLS) 3. ...

  6. RabbitMQ 端口号解析

    转自:https://www.cnblogs.com/liuxingke/articles/9889517.html 端口号解析 12345 - 4369 (epmd), 25672 (Erlang ...

  7. java获取object属性值_java反射获取一个object属性值代码解析

    有些时候你明明知道这个object里面是什么,但是因为种种原因,你不能将它转化成一个对象,只是想单纯地提取出这个object里的一些东西,这个时候就需要用反射了. 假如你这个类是这样的: privat ...

  8. boost::spirit模块实现一个类似于 XML 的小型解析器的测试程序

    boost::spirit模块实现一个类似于 XML 的小型解析器的测试程序 实现功能 C++实现代码 实现功能 boost::spirit模块实现一个类似于 XML 的小型解析器的测试程序 C++实 ...

  9. boost::spirit模块实现一个类似于 XML 的小型解析器,Karma 用于打印生成的 AST

    boost::spirit模块实现一个类似于 XML 的小型解析器,Karma 用于打印生成的 AST 实现功能 C++实现代码 实现功能 boost::spirit模块实现一个类似于 XML 的小型 ...

最新文章

  1. Android学习笔记--动画特效
  2. 编程python用什么软件比较好-新手入门Python编程的8个实用建议
  3. SCCM 2012系列之新特性概览一:SCCM 2012安装选项和控制台新界面预览
  4. 把接口作为函数的参数,那么任何实现了接口的类的实例都可以作为此函数的参数传递...
  5. Emacs中使用Forms-mode以表格形式展示/编辑简单的文本数据
  6. fastapi jinja2_(入门篇)Python框架之FastAPI——一个比Flask和Tornado更高性能的API 框架
  7. Kibana 的安装(Windows版本)新手入门
  8. 2.窗口大小改变和侧边栏收缩的时候,echarts图表的自适应
  9. Redis单机数据库实现
  10. 蓝桥杯青少年创意编程大赛题解:STEMA
  11. 密码攻防系列文章27-web后台登录口令暴力破解及防御
  12. PS制作3D立体字步骤教程
  13. 【MYSQL】mysql.sock连接问题
  14. iOS应用性能调优的建议和技巧--中高级--王朋
  15. Redux-前端开发者的福音
  16. SEO优化:什么是SEO链轮?站群与博客群的优劣比较!
  17. 酷我音乐mp3歌曲URL地址提取(作背景音乐)
  18. 手工彻底清除各种顽固性 Trojan Horse ***的方法
  19. BeanFactory与ApplicationContext的区别
  20. 「数据治理那点事」系列之三:不忘初心方得始终,数据质量管理要稳住!

热门文章

  1. 超简单的Oracle 数据库安装教程
  2. 面对不可避免的故障,我们造了一个“上帝视角”的控制台
  3. K8s 资源全汇总 | K8s 大咖带你 31 堂课从零入门 K8s
  4. 一文读懂分布式架构知识体系(内含超全核心知识大图)
  5. 下列哪些是java语言的条件执行语句_13春福师《JAVA程序设计》在线作业二
  6. h5 video 手机 显示第一帧_解决h5嵌入app后video标签poster不能显示视频第一帧(表现为空白)...
  7. 计算机系统基础期中考试,计算机系统基础第二次作业.docx
  8. 手机投电脑_这七个电脑软件,用过的才知道多好用!
  9. 【百家稷学】卷积神经网络的前世、今生与未来(武汉工程大学技术分享)
  10. 【GAN优化】GAN优化专栏上线,首谈生成模型与GAN基础