0
4

4 回答 4

2

描述

该表达式将:

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

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

在此处输入图像描述

例子

现场示例: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
于 2013-07-19T12:51:20.400 回答
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",然后您可以随意将其拆分。

于 2013-07-19T09:49:25.377 回答
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

排序。

于 2013-07-19T12:39:06.857 回答
0

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

A.添加runat和id属性:

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

然后您可以通过调用访问 hrefmyLink.HRef

B. 你可以使用 asp:Hyperlink 服务器控件来代替

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

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


编辑:

如果链接是在客户端生成的,那么您必须进行一些修改,因为该链接不会直接对服务器代码可见。

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

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

那么您需要在创建超链接之后(或在回发之前)运行一些 javascript。我在此示例中使用 jquery,但您也可以使用纯 javascript。

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

这会将您的 href 值保存到隐藏的输入中。所以当你回发时,你可以通过调用来访问它的值:tempContainer.Value

于 2013-07-19T09:54:25.543 回答