正则表达式替换html标记之外的匹配关键字和锚点(a)标记文本

时间:2014-01-25 09:21:16

标签: c# html asp.net regex

我正在开发一个asp.net应用程序。我想添加关键字链接系统。

我想让关键字成为另一个页面的超链接。但是,我不应该链接关键字,如果它当前链接(到任何页面)。例如:

it is a <a href="http://www.somesite.com">linked keyword</a> and it should be a linked keyword.

应转换为:

it is a <a href="http://www.somesite.com">linked keyword</a> and it should be a linked <a href="http://newlycreatedLink.com">keyword</a>.

如您所见,第一个关键字应保持不变。

你能帮我解决这个问题吗?

我在asp.net论坛中找到了this link。但我应该调整答案以排除当前链接的关键字。我到处搜索但一无所获。

2 个答案:

答案 0 :(得分:2)

要检查关键字是否在“外部”,look ahead

  • (?=如果在关键字之后有一个开头<tag$结束
  • [^<>]*任意数量的字符,不是><
  • 后跟(?:<\w|$)\w是word-charcters的简写[a-zA-Z_0-9]

所以模式看起来像:

String pattern = @"(?i)\bkeyword\b(?=[^<>]*(?:<\w|$))";

String replacement = @"<a href=\"http://newlycreatedLink.com\">\0</a>";

将关键字放入字边界\b,并使用(?i) i修饰符区分大小写。

因此,这只会替换后跟开头标记或结尾的keyword


更新:要替换keyword“内部”代码,最后不要</a添加|<\/[^a]

String pattern = @"(?i)\bkeyword\b(?=[^<>]*(?:<\w|<\/[^a]|$))";

答案 1 :(得分:1)

不要像这样使用正则表达式进行复杂的HTML解析。请使用正确的HTML解析器 - here's why