繁体   English   中英

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

[英]Regular expression to replace match keywords outside html tags AND anchor (a) tag text

我正在开发一个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论坛中找到了这个链接 但我应该调整答案以排除当前链接的关键字。 我到处搜索但一无所获。

要检查关键字是否在“外部”, 请向前看

  • (?=如果在关键字之后有一个开头<tag$ end
  • [^<>]*任何数量的字符,不是> OR <
  • 接着是(?:<\\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 add |<\\/[^a]

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

不要像这样使用正则表达式进行复杂的HTML解析。 使用正确的HTML解析器 - 这就是原因

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM