import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(?imx)\n"
+ "(^\\h*) # capture les espaces avant #cs (ex. < >#cs)\n"
+ "(\n"
+ " \\# (?> cs|comments-start ) \\b\\N*\\R # => #cs\n\n"
+ " # => commentaires (partie entre #cs et #ce)\n"
+ " (?:\n"
+ " # vérifie qu'il s'agit bien d'un commentaire\n"
+ " # c.-à-d. que le début de la ligne NE doit PAS être suivi par ce qui\n"
+ " # correspond à un début (#cs) ou fin de commentaire (#ce)\n"
+ " (?!\n"
+ " \\h* \\# (?> cs|comments-start|ce|comments-end ) \\b\\N*\\R\n"
+ " )\n"
+ " # le commentaire\n"
+ " # un commentaire peut simplement être une nouvelle ligne (\\R)\n"
+ " \\N*\\R\n"
+ " | # commentaire ou récursion (si aucun commentaire trouvé)\n"
+ " # récursion (depuis le début) pour chercher un nouveau #cs\n"
+ " (?R)\n"
+ " )* # les commentaire sont facultatifs\n\n"
+ " \\h* \\# (?> ce|comments-end ) # => #ce\n\n"
+ " \\b\\N*? # texte après #ce, facultatif (ex. #ce< TEXTE>)\n"
+ ")\n\n"
+ "# capture, s'il y en a, les espaces et la fin de ligne après #ce (ex. #ce blabla...< \\R>)\n"
+ "(\n"
+ " \\h*+ $ # espaces après #ce ; seulement ceux avant la fin de ligne (ex. #ce blabla...< >$)\n"
+ " \\R? # retour à la ligne facultatif\n"
+ ")";
final String string = " #cs xyz\n"
+ " gna\n"
+ " #cs xyz\n"
+ " gna gna\n"
+ " #ce #ce\n"
+ " #ce #ce \n"
+ "#ce\n\n"
+ "#cs xyz\n"
+ " gna gna\n"
+ "#ce xyz\n\n"
+ "-------------------------------------\n\n"
+ "#cs\n"
+ " ...\n"
+ "#\n"
+ "#cs\n"
+ "#cs\n"
+ "#cs\n"
+ " ...\n"
+ "#cs\n"
+ " ...\n"
+ "#ce\n"
+ " #ce\n"
+ "#ce\n"
+ "#ce\n"
+ ";#ce\n"
+ "#ce\n"
+ "#ce\n"
+ "-------------------------------------\n"
+ "#comments-start BON\n"
+ " ...\n"
+ "#\n"
+ " #cs\n"
+ " ...\n"
+ " #cs\n"
+ " ...\n"
+ " #ce\n"
+ "#ce\n"
+ "...\n"
+ "#ce\n"
+ "-------------------------------------\n"
+ "#comments-start BON\n"
+ " ...\n"
+ "#\n"
+ " #comments-start\n"
+ " ...\n"
+ " #cs\n"
+ " ...\n"
+ "#comments-end\n"
+ " #ce\n"
+ "...\n"
+ "#comments-end \n"
+ "#comments-end\n"
+ "-------------------------------------\n"
+ " #cs\n"
+ ";#cs\n"
+ ";#ce\n"
+ "#ce u u u u \n\n"
+ " #cs\n"
+ ";#cs\n"
+ ";#ce\n"
+ "#ce u u u u\n\n"
+ " #cs\n"
+ ";#cs\n"
+ ";#ce\n"
+ "#ce u u u u \n\n"
+ " #cs\n"
+ ";#cs\n"
+ ";#ce\n"
+ "#ce \n\n"
+ " #cs\n"
+ ";#cs\n"
+ ";#ce\n"
+ "#ce i\n\n"
+ " #cs\n"
+ ";#cs\n"
+ ";#ce\n"
+ "#ce i\n\n"
+ " #cs\n"
+ ";#cs\n"
+ ";#ce\n"
+ "#ce i \n\n"
+ "-------------------------------------\n\n"
+ "#cs,test\n"
+ " ...\n"
+ "#cs...\n"
+ " .#cs.. NE_PAS_CAPTURER\n"
+ "#ceNE_PAS_CAPTURER\n"
+ " ...\n"
+ "#ce\n"
+ "#ce\n"
+ "#ce\n\n"
+ "-------------------------------------\n\n"
+ "#cs\n"
+ "#ce\n\n"
+ "#comments-start\n"
+ " ...\n"
+ " #\n"
+ " #cs\n"
+ " #cs\n"
+ " ...\n"
+ " #cs---\n"
+ " ...\n"
+ "#\n"
+ " # ce NE_PAS_CAPTURER\n"
+ " #ce\n"
+ " #ce\n"
+ "#ce\n"
+ " #ce\n"
+ "#ce\n\n"
+ "...\n"
+ "-------------------------------------\n"
+ "--------- [NE PAS CAPTURER] ---------\n"
+ "#ce\n\n"
+ "#ce\n"
+ "#ce\n\n"
+ "#cs\n\n"
+ "#cs\n"
+ "#cs\n\n"
+ "#cs\n"
+ "#cs\n"
+ "#cs\n";
final String subst = "[\\1]<span class=\"S2\">\\2</span>[\\3]";
final Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.COMMENTS);
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