2 回答

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊
眾所周知,如果您嘗試捕獲完整的標(biāo)簽數(shù)據(jù)并嘗試對(duì)其進(jìn)行操作,強(qiáng)烈建議不要使用正則表達(dá)式解析 HTML。但是如果你只是想去掉所有標(biāo)簽,或者有條件地去掉一些標(biāo)簽,比如在這種情況下,你想刪除除標(biāo)簽之外的所有<br>
標(biāo)簽,你可以使用這個(gè)正則表達(dá)式,
<\/?(?!br>)\w+[^>]*>
解釋?zhuān)?/strong>
<
- 匹配標(biāo)簽的開(kāi)始\/?
- 可選地匹配/
匹配的結(jié)束標(biāo)簽(?!br>)
- 如果標(biāo)簽名稱(chēng)是,則拒絕匹配br
\w+
- 匹配任何由單詞字符組成的標(biāo)簽名稱(chēng)[^>]*
- 可選地允許標(biāo)簽屬性匹配>
- 匹配關(guān)閉標(biāo)簽
示例 Java 代碼,
String s = "Hello. How can I help you?<br>I don't know<br>Use the link <a \r\n" +
"href=\"www.google.com\" target=\"_blank\">Google</a></br>Hello. <sometag>somedata</sometag> hey <br1>somedata</br2> hello <1br>somedata</1br> How can I help you?<br>I don't know<br>Use the link <a \r\n" +
"href=\"www.google.com\" target=\"_blank\">Google</a></br>";
System.out.println(s.replaceAll("</?(?!br>)\\w+[^>]*>", ""));
在刪除除<br>and之外的所有標(biāo)簽的地方打印此內(nèi)容</br>,
Hello. How can I help you?<br>I don't know<br>Use the link Google</br>Hello. somedata hey somedata hello somedata How can I help you?<br>I don't know<br>Use the link Google</br>
編輯:正如Lino在他的評(píng)論中提到的,如果您的標(biāo)簽名稱(chēng)在br文本周?chē)锌蛇x空格,您可以使用以下允許可選空格的正則表達(dá)式,
<\s*\/?\s*(?!br\s*>)\w+[^>]*>
演示允許 br 標(biāo)簽中的可選空間

TA貢獻(xiàn)1826條經(jīng)驗(yàn) 獲得超6個(gè)贊
使用解析 HTMLregex不是一個(gè)好主意。如果您確定它始終是 HTML,我建議您使用Jsoup它會(huì)自動(dòng)使用您的 html 并返回文檔。
Document doc = Jsoup.parse(sb.toString());
printChilds(doc.body().childNodes());
public static void printChilds(List<Node> node)
{
for (Node n : node)
{
if (n.childNodeSize() == 0)
System.out.print(n.toString());
else
printChilds(n.childNodes());
}
}
將輸出Hello. How can I help you?<br>I don't know<br>Use the link Google<br>
添加回答
舉報(bào)