【发布时间】:2011-06-22 14:11:20
【问题描述】:
但是我需要编写一个函数,它接收一个字符串,在超链接中查找一个 URL,然后交换 url,以便页面名称现在用作锚点,例如
<a href="mysection/mysector/apage.aspx">
会变成
<a href="mysection/mysector.aspx#apage">
但这只会发生在 mysector 文件夹中的链接上。
我现在有点难过,任何帮助都会很棒。
【问题讨论】:
但是我需要编写一个函数,它接收一个字符串,在超链接中查找一个 URL,然后交换 url,以便页面名称现在用作锚点,例如
<a href="mysection/mysector/apage.aspx">
会变成
<a href="mysection/mysector.aspx#apage">
但这只会发生在 mysector 文件夹中的链接上。
我现在有点难过,任何帮助都会很棒。
【问题讨论】:
这将吃掉“文件夹/”的所有序列并捕获最后一个。这会附加一个“.aspx”和“#”以及不带扩展名的文件名。如果您的文件夹和文件名不仅可以包含字母数字字符,则字符类可能需要进一步调整。
href="(([a-z0-9]+/)*)([a-z0-9]+)/([^.]+)\.aspx"
然后替换为
href="$1$3.aspx#$4"
还可以尝试“mysection/anothersection/yetanotherone/mysector/apage.aspx”来了解它的工作原理。
【讨论】:
我将建议使用IIS URLRewrite 模块在后端修复它。那么你就不需要任何代码了。
如果你真的想在 c# 中这样做:
public string FixLinks(string strHTML)
{
try
{
return Regex.Replace(strHTML, "(href=\\\".*/mysector)/(.*)", "$1.aspx#$2");
}
catch (Exception e)
{
return strHTML;
}
}
【讨论】:
不分先后:
这将在您测试正则表达式时为您提供帮助: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
祝你好运。
【讨论】: