为了账号安全,请及时绑定邮箱和手机立即绑定

查找<a>链接的'href'值的正则表达式

/ 猿问

查找<a>链接的'href'值的正则表达式

吃鸡游戏 2019-10-12 10:11:44

我需要一个正则表达式模式来查找HTML中的网页链接。


我首先使用@"(<a.*?>.*?</a>)"提取链接(<a>),但无法从中获取链接href。


我的字符串是:


<a href="www.example.com/page.php?id=xxxx&name=yyyy" ....></a>

<a href="http://www.example.com/page.php?id=xxxx&name=yyyy" ....></a>

<a href="https://www.example.com/page.php?id=xxxx&name=yyyy" ....></a>

<a href="www.example.com/page.php/404" ....></a>

1,2和3是有效的,我需要他们,但4号是无效的,我(?和=是必不可少的)


谢谢大家,但是我不需要解析<a>。我有href="abcdef"格式的链接列表 。


我需要获取href链接并对其进行过滤,我最喜欢的网址必须包含?和=喜欢page.php?id=5


谢谢!


查看完整描述

3 回答

?
守候你守候我

我建议在正则表达式上使用HTML解析器,但是这里仍然是一个正则表达式,它将href根据每个链接的属性值创建捕获组。它将匹配使用双引号还是单引号。


<a\s+(?:[^>]*?\s+)?href=(["'])(.*?)\1

您可以在此处查看此正则表达式的完整说明。


摘要游乐场:


let rx = /<a\s+(?:[^>]*?\s+)?href=(["'])(.*?)\1/,

    textToMatchInput = document.querySelector('[name=textToMatch]');


document.querySelector('button').addEventListener('click', function () {

  console.log(textToMatchInput.value.match(rx));

});

<label>

  Text to match:

  <input type="text" name="textToMatch" value='<a href="google.com"'>

  

  <button>Match</button>

 </label>


查看完整回答
反对 回复 2019-10-12
?
LEATH

regex不建议使用解析html


regex用于定期发生的模式。html是不是经常与它的格式(除xhtml)。例如html文件,即使你有效不有closing tag!这可能会破坏你的代码。


使用像htmlagilitypack这样的html解析器


您可以使用以下代码使用以下代码来检索href's锚定标记中的所有内容:HtmlAgilityPack


HtmlDocument doc = new HtmlDocument();

doc.Load(yourStream);


var hrefList = doc.DocumentNode.SelectNodes("//a")

                  .Select(p => p.GetAttributeValue("href", "not found"))

                  .ToList();

hrefList 包含所有href


查看完整回答
反对 回复 2019-10-12
?
叮当猫咪

尝试这个 :


 public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }


        private void Form1_Load(object sender, EventArgs e)

        {

            var res = Find(html);

        }


        public static List<LinkItem> Find(string file)

        {

            List<LinkItem> list = new List<LinkItem>();


            // 1.

            // Find all matches in file.

            MatchCollection m1 = Regex.Matches(file, @"(<a.*?>.*?</a>)",

                RegexOptions.Singleline);


            // 2.

            // Loop over each match.

            foreach (Match m in m1)

            {

                string value = m.Groups[1].Value;

                LinkItem i = new LinkItem();


                // 3.

                // Get href attribute.

                Match m2 = Regex.Match(value, @"href=\""(.*?)\""",

                RegexOptions.Singleline);

                if (m2.Success)

                {

                    i.Href = m2.Groups[1].Value;

                }


                // 4.

                // Remove inner tags from text.

                string t = Regex.Replace(value, @"\s*<.*?>\s*", "",

                RegexOptions.Singleline);

                i.Text = t;


                list.Add(i);

            }

            return list;

        }


        public struct LinkItem

        {

            public string Href;

            public string Text;


            public override string ToString()

            {

                return Href + "\n\t" + Text;

            }

        }


    }  

输入:


  string html = "<a href=\"www.aaa.xx/xx.zz?id=xxxx&name=xxxx\" ....></a> 2.<a href=\"http://www.aaa.xx/xx.zz?id=xxxx&name=xxxx\" ....></a> "; 

结果:


[0] = {www.aaa.xx/xx.zz?id=xxxx&name=xxxx}

[1] = {http://www.aaa.xx/xx.zz?id=xxxx&name=xxxx}

C#抓取HTML链接


刮HTML提取重要的页面元素。它对网站管理员和ASP.NET开发人员有许多法律用途。使用Regex类型和WebClient,我们实现了HTML的屏幕抓取。


已编辑

另一种简单的方法:您可以使用web browser控件href从tag 进行获取a,例如:(请参阅我的示例)


 public Form1()

        {

            InitializeComponent();

            webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);

        }


        private void Form1_Load(object sender, EventArgs e)

        {

            webBrowser1.DocumentText = "<a href=\"www.aaa.xx/xx.zz?id=xxxx&name=xxxx\" ....></a><a href=\"http://www.aaa.xx/xx.zz?id=xxxx&name=xxxx\" ....></a><a href=\"https://www.aaa.xx/xx.zz?id=xxxx&name=xxxx\" ....></a><a href=\"www.aaa.xx/xx.zz/xxx\" ....></a>";

        }


        void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)

        {

            List<string> href = new List<string>();

            foreach (HtmlElement el in webBrowser1.Document.GetElementsByTagName("a"))

            {

                href.Add(el.GetAttribute("href"));

            }

        }


查看完整回答
反对 回复 2019-10-12

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信