【问题标题】:asp.net c# Regex url parsingasp.net c#正则表达式url解析
【发布时间】:2011-06-22 14:11:20
【问题描述】:

但是我需要编写一个函数,它接收一个字符串,在超链接中查找一个 URL,然后交换 url,以便页面名称现在用作锚点,例如

<a href="mysection/mysector/apage.aspx">

会变成

<a href="mysection/mysector.aspx#apage">

但这只会发生在 mysector 文件夹中的链接上。

我现在有点难过,任何帮助都会很棒。

【问题讨论】:

    标签: c# asp.net regex url


    【解决方案1】:

    这将吃掉“文件夹/”的所有序列并捕获最后一个。这会附加一个“.aspx”和“#”以及不带扩展名的文件名。如果您的文件夹和文件名不仅可以包含字母数字字符,则字符类可能需要进一步调整。

    href="(([a-z0-9]+/)*)([a-z0-9]+)/([^.]+)\.aspx"
    

    然后替换为

    href="$1$3.aspx#$4"
    

    还可以尝试“mysection/anothersection/yetanotherone/mysector/apage.aspx”来了解它的工作原理。

    【讨论】:

    • 嘿 Leif,感谢您的解释,但我认为我需要更多帮助才能使其正常工作。当我在regexpal.com 中尝试它时,我将您的正则表达式与测试字符串 some text /mysector/page.aspx sadsadasdasd 一起使用,但它似乎不匹配任何东西。
    • 在 regexpal.com 上,您必须确保您的正则表达式没有任何尾随空格(换行符等)。您也可以使用 Tremmors 使用的函数尝试我的正则表达式。我对其进行了一些调整,使其更具体,如果您对其进行转义,它应该可以在 C# 中使用。您也可以在gskinner.com/RegExr 上查看我的正则表达式,这样会更好。它可以工作(选择“替换”选项卡)。
    • 啊,绿色复选标记告诉我它有效。 :) 我希望您对解决方案感到满意。
    • 嘿 Leif,是的,非常感谢。而且我认为我对正则表达式的理解更好一些,双赢。
    【解决方案2】:

    我将建议使用IIS URLRewrite 模块在后端修复它。那么你就不需要任何代码了。

    如果你真的想在 c# 中这样做:

    public string FixLinks(string strHTML)
    {
        try
        {
            return Regex.Replace(strHTML, "(href=\\\".*/mysector)/(.*)", "$1.aspx#$2");
        }
        catch (Exception e)
        {
            return strHTML;
        }
    }
    

    【讨论】:

    • 这只适用于“mysector”作为最后一个文件夹。此外,我认为它实际上是行不通的。你真的试过了吗?
    • OP 指出他只想要 mysector 文件夹中的链接。当然,这没有考虑该文件夹中的任何子目录,但他没有指定。我很快测试了它,它似乎确实有效。它不适合你吗?
    【解决方案3】:

    不分先后:

    这将在您测试正则表达式时为您提供帮助:http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

    查看Matches 集合,这里将保存字符串的各个部分。

    一个例子:http://forums.asp.net/t/1408417.aspx/1

    警告:RegEx match open tags except XHTML self-contained tags

    祝你好运。

    【讨论】:

      猜你喜欢
      • 2011-03-20
      • 2015-12-22
      • 2012-08-23
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多