我一直試圖通過RegEx來工作,我可以使用它替換所有<和>文本字符串,但不包括那些字符串是HTML標記的一部分的情況。替換不屬於HTML標記的所有< and >
例如:
var str = "<p>The <b>value</b> <i>1</i> is < <u>2</u></p>"
鑑於上面的例子中,我想看起來像這樣一個結果字符串:
var str = "<p>The <b>value</b> <i>1</i> is < <u>2</u></p>"
我一直試圖通過RegEx來工作,我可以使用它替換所有<和>文本字符串,但不包括那些字符串是HTML標記的一部分的情況。替換不屬於HTML標記的所有< and >
例如:
var str = "<p>The <b>value</b> <i>1</i> is < <u>2</u></p>"
鑑於上面的例子中,我想看起來像這樣一個結果字符串:
var str = "<p>The <b>value</b> <i>1</i> is < <u>2</u></p>"
這並不容易。查看相關問題的權威答案here。
正則表達式不是爲這種類型的解析而構建的。即使標記或dom解析也會導致問題。你的問題的標題說明了這個問題:
Replace all <and> that are NOT part of an HTML tag
解析器如何才能知道是否<and>
是<AND>
標籤,或者乾脆字and
圍繞兩個孤兒尖括號?
HTML解析器可能是您最好的選擇,但如何處理孤兒括號是關鍵。此外,您還需要查找不匹配的標籤或非法標籤來查找問題標題等案例。
HTML是非常困難的使用正則表達式來解析。 HTML規範非常寬容,而且瀏覽器的實現往往更加寬容。這樣做的結果是,試圖僅僅使用正則表達式來匹配這樣的東西幾乎是不可能的。
它更強大的使用全面的HTML解析器,理解所有的特殊情況來生成一個DOM,然後遍歷生成的代碼中尋找尖括號的DOM。
正如你用.NET標記了你的問題,我可以推薦HTML Agility Pack來執行這種類型的任務。
關於如何檢測HTML標記中或不在HTML文本中的問題,你應該能夠根據你的需要修改這個概念。
基本上,您正在尋找一個<
,其後面跟着一個>
,並且您想用符號註釋表單<
替換它。嘗試類似:
var output = Regex.Replace(input, "<(?!.*?[>])", "<");
而字符串''會發生什麼? – CanSpice 2011-03-28 19:05:43
這將匹配上面示例中的每個<<;實際上,它將匹配整個字符串中的每個「<」到最終的「>」。這正是使正則表達式成爲HTML/XML錯誤工具的一種任務。 – 2011-03-28 19:08:43
閱讀[this](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454),然後考慮使用HTML Agility Pack 。 – 2011-03-28 18:55:49
哈哈「用正則表達式解析HTML會讓感染靈魂進入生命的領域。」 – Sage 2011-03-28 19:10:08