import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(?(DEFINE)\n"
+ " (?<tagName>\n"
+ " [a-z][a-z\\d]*+ (?=[>\\s/])\n"
+ " )\n"
+ " (?<tagAttr>\n"
+ " (?>\n"
+ " [^>\"']++\n"
+ " | \" [^\"]*+ \"\n"
+ " | ' [^']*+ '\n"
+ " )*+\n"
+ " )\n"
+ ")\n\n"
+ "< (li|/ul) /?+ (?=[>\\s/]) ((?&tagAttr)) >\n"
+ "((?:\n"
+ " [^<]++\n"
+ " | < /?+ (?!(?:li|ul)(?=[>\\s/])) (?&tagName) (?&tagAttr) > #any tag except <li> and <ul>\n"
+ " | < (?! /?+ (?&tagName) ) #not tag\n"
+ ")*)\n"
+ "(?= < (?:li|/ul) (?=[>\\s/]) (?&tagAttr) ) #check for nested <li> and <ul>";
final String string = "<ul>\n"
+ " <li fhgfhfg ghgfhfghhfgh= ghghg=\"...\" a = 'ghghg'>dfdsfsd\n"
+ " <ul>\n"
+ " <li>111</li>\n"
+ " <li/>2222\n"
+ " <li>mmmmm</li>\n"
+ " </ul>\n"
+ " <li>dfdsfdsfsdf <b class=\"...\"><br/>fgdfgd<i></b><!-- dfdf--><li>\n"
+ " <li>\n"
+ " <li>dsfsdfsdfdsf\n"
+ "</ul>\n\n";
final String subst = "<$3$4>$5</LI>\\r";
final Pattern pattern = Pattern.compile(regex, Pattern.DOTALL | Pattern.CASE_INSENSITIVE | Pattern.COMMENTS | Pattern.UNICODE_CASE);
final Matcher matcher = pattern.matcher(string);
// The substituted value will be contained in the result variable
final String result = matcher.replaceAll(subst);
System.out.println("Substitution result: " + result);
}
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Java, please visit: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html