首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >超级链接不匹配的复杂Regex问题"?“

超级链接不匹配的复杂Regex问题"?“
EN

Stack Overflow用户
提问于 2011-07-01 16:06:25
回答 3查看 166关注 0票数 0

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

案例1:没有问题

输入: ASAss123

输出:ASAss123

案例2:这里的问题

输入:ASAsq123

产出:ASAsq123 123“>ASAsq123 123

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

优先输出:ASAsq123

我怎样才能纠正这个问题。这里的代码供您参考:

代码语言:javascript
复制
 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夏普说逃逸序列不被识别.

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-01 16:43:43

你需要这样逃跑:

代码语言:javascript
复制
\\?

你要逃跑吗?在regex中,但是还需要在c#字符串中转义。

票数 3
EN

Stack Overflow用户

发布于 2011-07-01 16:10:10

看起来您需要像test?一样转义test\?,所以它并不意味着可选的t

票数 4
EN

Stack Overflow用户

发布于 2011-07-01 16:44:14

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

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

代码语言:javascript
复制
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>");
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6550412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档