复杂的正则表达式问题与超链接不匹配“?”

时间:2011-07-01 16:06:25

标签: c# .net regex

我正在使用C#中的超链接替换文本。这里的问题是该链接有问号

案例1:没问题

输入:ASAss123

输出:ASAss123

案例2:问题在这里

输入:ASAsq123

输出: ASAsq123 “> ASAsq123

(注意:首次出现的ASAss123是超链接,被替换为http://stack.com/temp/test?order=sam&identifier=<a href=,第二次出现的只是纯文本)

首选输出:ASAsq123

我该如何纠正这个问题。这里的代码供您参考:

 mailItem.HTMLBody = Regex.Replace(
     mailItem.HTMLBody,
     "(?<!http://stack.com/temp/test?order=sam&identifier=)ASA[a-z][a-z][0-9][0-9][0-9](?!</a>)",
     "<a href=\"http://stack.com/temp/test?order=sam&identifier=$&\">$&</a>");

这里的问题是“?”在第二个参数中找到。如果我摆脱这个“?”在第二和第三个论点中,这完全正常。

但是我无法摆脱“?”,因为URL需要它才能运行。我该如何解决这个问题?

我用\?尝试了转义序列?而C sharp说逃脱序列未被识别......

3 个答案:

答案 0 :(得分:4)

您似乎需要逃避test? test\?,因此并不意味着选择t

答案 1 :(得分:3)

你需要像这样逃跑:

\\?
你正在逃避吗?在正则表达式中,\ _也需要在c#字符串中进行转义。

答案 2 :(得分:2)

C#无法识别序列\?,因为它是正则表达式而不是C#。

为防止C#尝试识别字符串中的转义序列并使C#像对待任何其他字符一样处理\?,您必须在字符串前加@

mailItem.HTMLBody = Regex.Replace(
 mailItem.HTMLBody,
 @"(?<!http://stack.com/temp/test?order=sam&identifier=)ASA[a-z][a-z][0-9][0-9][0-9](?!</a>)",
 "<a href=\"http://stack.com/temp/test?order=sam&identifier=$&\">$&</a>");