我需要使用正则表达式搜索html文件并将href="pagename"
替换为href="pages/pagename"
此外,href的格式可以为HREF = 'pagename'
我不想替换任何以http,ftp,mailto,javascript开头的大写或小写的href,#
我正在使用c#来开发这个小应用程序。
答案 0 :(得分:3)
不建议通过Regex进行HTML操作,因为HTML不是“常规语言”。我强烈建议您使用HTML Agility Pack。这为HTML提供了一个DOM接口。
答案 1 :(得分:0)
我没有对很多案例进行过测试,但对于这种情况,它有效:
var str = "href='page' href = 'www.goo' href='http://' href='ftp://'";
Console.WriteLine(Regex.Replace(str, @"href ?= ?(('|"")([a-z0-9_#.-]+)('|""))", "x", RegexOptions.IgnoreCase));
结果:
"x x href='http://' href='ftp://'"
您最好在运行此文件之前保留备份文件:P
答案 2 :(得分:0)
使用HTML和XML查找/替换时有很多警告。问题是,允许的语法有很多变化。 (许多不允许但仍然有效!)
但是,你似乎想要这样的东西:
搜索
([Hh][Rr][Ee][Ff]\s*=\s*['"])(\w+)(['"])
这意味着:
[Hh]
:方括号中的任何项目,后跟\s*
:任意数量的空格(可能为零),=
\s*
任何更多的空格,['"]
报价类型,\w+
:一个单词(没有任何斜线或点 - 如果您想包含.html
,请改用[.\w]+
),['"]
:任何类型的引用。替换为
$1pages/$2$3
这意味着第一个括号中的内容,然后pages/
,然后是第二和第三组括号中的内容。
您需要将第一个字符串放在@“引号中,并将双引号转义为""
。
请注意,它甚至不会做任何模糊的智能,比如确保引号匹配。警告:尝试永远不要在这种正则表达式中使用“任何字符”(.
)符号,因为它会抓取大部分文本,包括下一个引号,可能直到文件末尾!
查看正则表达式教程以获取更多信息,例如http://www.regular-expressions.info/dotnet.html