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