[英]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.