【问题标题】:c# and Regex: How do I make a match?c# 和正则表达式:我如何进行匹配?
【发布时间】:2011-02-22 19:13:29
【问题描述】:

阿罗哈,

我需要匹配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 标签。

谢谢!

【问题讨论】:

  • 你的意思是它必须是相对地址吗?您的示例描述性不够。

标签: c# regex


【解决方案1】:

我建议使用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));

【讨论】:

  • 如果 strContent 只是 url,这将起作用,它不是。抱歉,我已经更新了我的问题,详细说明了情况。
  • @justin808:你试过\"而不是^吗?但是,现在您已经更新了您的问题,我看到您正在将其用于 HTML。我建议使用 HTML 解析器来查找 href 属性,并且 not 是正则表达式。见:stackoverflow.com/questions/1732348/…
【解决方案2】:

您可以只使用 ^ 来查找行首。
... 或者你可以很酷,在(?&lt;!http://.*?/) 后面使用负面的观察。 ;)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    相关资源
    最近更新 更多