c#和Regex:我如何进行比赛?

时间:2011-02-22 19:13:29

标签: c# regex

阿罗哈,

我需要匹配page.aspx?cmd=Show&id=但不匹配http://random address/page.aspx?cmd=Show&id=

现在我只是用strContent.Replace("page.aspx?cmd=Show&id=", "page.aspx/Show/");进行简单的休息替换,但为了避免上述情况,我认为我需要转移到正则表达式。

编辑抱歉我的细节有点短暂当前的替换有效,因为我没有考虑到被修改的地址应该只是相对地址,而不是绝对地址。我需要捕获与page.aspx?cmd=Show&id=匹配的所有相对地址,并将该字符串转换为page.aspx/Show/

.StartsWith^无法正常工作,因为我查找的字符串是完整的html页面。所以我需要能够转换:

<p>Hello, please click <a href="page.aspx?cmd=Show&id=10">here</a>.</p>

进入

<p>Hello, please click <a href="page/Show/10">here</a>.</p>

但不转换

<p>Hello, please click <a href="http://some address/page.aspx?cmd=Show&id=10">here</a>.</p>

我在我的示例中使用了A标记,但我也需要转换IMG标记。

谢谢!

2 个答案:

答案 0 :(得分:3)

我建议使用ParseQueryString而不是正则表达式,因为即使参数的顺序不同,这也会有效。

否则,您可以使用string.StartsWith来测试是否匹配。

如果你想使用正则表达式,你需要使用^并且还要转义字符串中的所有特殊字符:

Regex regex = new Regex(@"^page\.aspx\?cmd=Show&id=");

如果你不想自己逃避角色,你可以Regex.Escape为你做这件事:

string urlToMatch = "page.aspx?cmd=Show&id=";
Regex regex = new Regex("^" + Regex.Escape(urlToMatch));

答案 1 :(得分:0)

您可以使用^来查找行首。
...或者你可以很酷并使用负面的后视(?<!http://.*?/)。 ;)

请参阅http://www.geekzilla.co.uk/View6BD88331-350D-429F-AB49-D18E90E0E705.htm