从<a> tag in html</a>获取href

时间:2013-07-19 09:43:13

标签: asp.net regex

您好我有一些信息在网页上显示HTML内容。

部分内容可以包含:

<p>
<a href="/documents/content/files/my_mp3.mp3" target="_blank">
    <img alt="" src="/pictures/content/images/play.jpg" style="width: 153px; height: 49px;"><br>
</a>
</p>

我要做的是取整个标签甚至只是“href”并将其存储在一个变量中......所以我可以在其他地方显示它(即在摘要中显示)

图像总是一致的,所以我真正需要的是href。

我在想的是:如果一个&lt; a&gt; tag href包含“.mp3”,然后获取“href”

&lt; a&gt; tag不包含ID或runat。它是使用javascript html编辑器输入的,所以没有id或runat。

任何人都知道如何做到这一点?

由于

4 个答案:

答案 0 :(得分:2)

描述

此表达式将:

  • 匹配具有以.mp3
  • 结尾的href属性的锚标签
  • 将避免困难的html边缘情况

    <a\b(?=\s)(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\shref="([^"]*.mp3)")(?:[^>=]|='[^']*'|="[^"]*"|=[^'"\s]*)*\s?>.*?<\/a>

enter image description here

实施例

实例:http://www.rubular.com/r/CMmFQDq0qX

示例文字

注意第二个锚标记有一些相当困难的边缘情况,这会使大多数表达式绊倒

<p>
<a href="/documents/content/files/my_mp3.mp3" target="_blank">
    <img alt="" src="/pictures/content/images/play.jpg" style="width: 153px; height: 49px;"><br>
</a>
<a onmouseover=' href="NotTheMP3Yourelookingfor.mp3" ; if (6 > x) { funRotate(href) ; } ; ' href="/documents/content/files/DifficultToFind.mp3" target="_blank">
    <img alt="" src="/pictures/content/images/play.jpg" style="width: 153px; height: 49px;"><br>
</a>
</p>

<强>匹配

第0组将拥有整个<a..>..</a>标记
第1组将只有href值

[0][0] = <a href="/documents/content/files/my_mp3.mp3" target="_blank">
    <img alt="" src="/pictures/content/images/play.jpg" style="width: 153px; height: 49px;"><br>
</a>
[0][1] = /documents/content/files/my_mp3.mp3


[1][0] = <a onmouseover=' href="NotTheMP3Yourelookingfor.mp3" ; if (6 > x) { funRotate(href) ; } ; ' href="/documents/content/files/DifficultToFind.mp3" target="_blank">
    <img alt="" src="/pictures/content/images/play.jpg" style="width: 153px; height: 49px;"><br>
</a>
[1][1] = /documents/content/files/DifficultToFind.mp3

答案 1 :(得分:1)

我假设您的标签使用的是ASP.NET,因此..

<a href="/documents/content/files/my_mp3.mp3" target="_blank"
                                              id="myAnchor" runat="server">

'runat'允许您在'id'后面的代码中引用它:

string href = myAnchor.HRef;

字符串'href'现在=“/documents/content/files/my_mp3.mp3”,然后您可以随意拆开它。

答案 2 :(得分:0)

如果您想在服务器端使用它,那么您有两个选择:

一个。添加runat和id属性:

`<a href="/documents/content/files/my_mp3.mp3" id="myLink" runat="server" target="_blank">`

然后您可以通过调用myLink.HRef

来访问href

B中。您可以使用asp:超链接服务器控件

`<asp:Hyperlink NavigateUrl="yourhref.html" id="myLink" runat="server" />`

这也将呈现为锚点,您可以通过调用myLink.NavigateUrl

来访问href

编辑:

如果在客户端生成链接,则必须进行一些修改,因为服务器代码不会直接看到此链接。

首先添加一个隐藏的输入控件。此控件将临时存储您的href,以便您在回发时可以访问它。

<input type="hidden" runat="server" id="tempContainer" />

然后你需要在创建超链接后(或在回发之前)运行一些javascript。我在这个例子中使用了jquery,但你也可以使用普通的javascript。

$('.<%=tempContainer.ClientID %>').val($('.some selector to your link').attr('href'));

这会将您的href值保存到隐藏的输入中。因此,当您回发时,您可以通过调用tempContainer.Value

来访问它的值

答案 3 :(得分:0)

好的,我想我已经成功了:

        If strContent.Contains(".mp3""") Then  'check if content contains .mp3

            'find the href tag usin regex 
            Dim pattern As String = "(href=\s*\""(.+?)\"")"
            Dim html As String = strContent
            Dim href() As String = Regex.Split(html, pattern)
            Dim href1 As String = href(1) 'gets the href tag

            'make sure that this href contains contains .mp3 (and it's not some other)
            If href1.Contains(".mp3""") Then 

                'this is a hidden control to display on summary main category page                                         
                Dim atemp As hyperlink = e.Item.FindControl("lnkSound") 

                 'remove the href= and quotes from the href  

                'set the naviate url
                atemp.navigateurl = href1.Replace("href=", "").Replace(chr(34), "")
                atemp.target = "_blank"

                'make it visible as hidden for summarys that don't contain .mp3
                atemp.visible = True

            End If
        End If

排序。