簡體   English   中英

java 在兩個標簽之間替換 html 區分大小寫

[英]java replace between two tags html with case sensitive

我在 java 中有這個正則表達式代碼,它從字符串中刪除<style>標記:

  String questionDroz  = "TEST0 <style>TESTE1</style> <style attr='attr1'>TEST2</style> <STYLE>TEST3</STYLE>";
  System.out.println(questionDroz.replaceAll("(?s)<style>.*?</style>", ""));

Output

TEST0  <style attr='attr1'>TEST2</style> <STYLE>TEST3</STYLE>

我還想刪除帶有屬性的樣式,可以是標簽中的任何屬性,並且不區分大小寫。

結果必須是:

TEST0

另外,如果可能的話,在這個正則表達式中添加<script> ,或者我可以在另一個正則表達式中單獨執行此操作沒問題。

如果您不考慮使用 HTML 解析器作為選項,或者這是涉及您可以控制的 HTML 內容的一次性作業,您可以使用

String regex = "(?si)\\s*<style(?:\\s[^>]*)?>.*?</style>";
String regex = "(?i)\\s*<style(?:\\s[^>]*)?>[^<]*(?:<(?!/style>)[^<]*)*</style>";

請參閱正則表達式演示 #1正則表達式演示 #2 請注意,第二個更有效,應該首選長輸入。

細節

  • (?si) - Pattern.DOTALL ( s ) 和Pattern.CASE_INSENSITIVE嵌入標志選項
  • \s* - 零個或多個空格
  • <style - 文字文本
  • (?:\s[^>]*)? - 一個可選的空格序列,然后是除>之外的任何零個或多個字符
  • > - 一個>字符
  • .*? - 任何零個或多個字符,盡可能少
  • [^<]*(?:<(?!/style>)[^<]*)* - 除了<之外的任何零個或多個字符,然后是任何零個或多個<不跟/style>的重復,然后除<以外的任何零個或多個字符
  • </style> - 文字文本。

請參閱Java 演示

String questionDroz  = "TEST0 <style>TESTE1</style> <style attr='attr1'>TEST2</style> <STYLE>TEST3</STYLE>";
String regex = "(?si)<style(?:\\s[^>]*)?>.*?</style>";
System.out.println(questionDroz.replaceAll(regex, "").trim());
// => TEST0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM