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