2 回答

TA貢獻1995條經驗 獲得超2個贊
眾所周知,如果您嘗試捕獲完整的標簽數據并嘗試對其進行操作,強烈建議不要使用正則表達式解析 HTML。但是如果你只是想去掉所有標簽,或者有條件地去掉一些標簽,比如在這種情況下,你想刪除除標簽之外的所有<br>
標簽,你可以使用這個正則表達式,
<\/?(?!br>)\w+[^>]*>
解釋:
<
- 匹配標簽的開始\/?
- 可選地匹配/
匹配的結束標簽(?!br>)
- 如果標簽名稱是,則拒絕匹配br
\w+
- 匹配任何由單詞字符組成的標簽名稱[^>]*
- 可選地允許標簽屬性匹配>
- 匹配關閉標簽
示例 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之外的所有標簽的地方打印此內容</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在他的評論中提到的,如果您的標簽名稱在br文本周圍有可選空格,您可以使用以下允許可選空格的正則表達式,
<\s*\/?\s*(?!br\s*>)\w+[^>]*>
演示允許 br 標簽中的可選空間

TA貢獻1826條經驗 獲得超6個贊
使用解析 HTMLregex不是一個好主意。如果您確定它始終是 HTML,我建議您使用Jsoup它會自動使用您的 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>
添加回答
舉報