#include <MsgBoxConstants.au3> ; to declare the Constants of MsgBox
Local $sRegex = "(?imx)(?imx)" & @CRLF & _
"(^\h*) # capture les espaces avant #cs (ex. < >#cs)" & @CRLF & _
"(" & @CRLF & _
" \# (?> cs|comments-start ) \b\N*\R # => #cs" & @CRLF & _
"" & @CRLF & _
" # => commentaires (partie entre #cs et #ce)" & @CRLF & _
" (?:" & @CRLF & _
" # vérifie qu'il s'agit bien d'un commentaire" & @CRLF & _
" # c.-à-d. que le début de la ligne NE doit PAS être suivi par ce qui" & @CRLF & _
" # correspond à un début (#cs) ou fin de commentaire (#ce)" & @CRLF & _
" (?!" & @CRLF & _
" \h* \# (?> cs|comments-start|ce|comments-end ) \b\N*\R" & @CRLF & _
" )" & @CRLF & _
" # le commentaire" & @CRLF & _
" # un commentaire peut simplement être une nouvelle ligne (\R)" & @CRLF & _
" \N*\R" & @CRLF & _
" | # commentaire ou récursion (si aucun commentaire trouvé)" & @CRLF & _
" # récursion (depuis le début) pour chercher un nouveau #cs" & @CRLF & _
" (?R)" & @CRLF & _
" )* # les commentaire sont facultatifs" & @CRLF & _
"" & @CRLF & _
" \h* \# (?> ce|comments-end ) # => #ce" & @CRLF & _
"" & @CRLF & _
" \b\N*? # texte après #ce, facultatif (ex. #ce< TEXTE>)" & @CRLF & _
")" & @CRLF & _
"" & @CRLF & _
"# capture, s'il y en a, les espaces et la fin de ligne après #ce (ex. #ce blabla...< \R>)" & @CRLF & _
"(" & @CRLF & _
" \h*+ $ # espaces après #ce ; seulement ceux avant la fin de ligne (ex. #ce blabla...< >$)" & @CRLF & _
" \R? # retour à la ligne facultatif" & @CRLF & _
")"
Local $sString = " #cs xyz" & @CRLF & _
" gna" & @CRLF & _
" #cs xyz" & @CRLF & _
" gna gna" & @CRLF & _
" #ce #ce" & @CRLF & _
" #ce #ce " & @CRLF & _
"#ce" & @CRLF & _
"" & @CRLF & _
"#cs xyz" & @CRLF & _
" gna gna" & @CRLF & _
"#ce xyz" & @CRLF & _
"" & @CRLF & _
"-------------------------------------" & @CRLF & _
"" & @CRLF & _
"#cs" & @CRLF & _
" ..." & @CRLF & _
"#" & @CRLF & _
"#cs" & @CRLF & _
"#cs" & @CRLF & _
"#cs" & @CRLF & _
" ..." & @CRLF & _
"#cs" & @CRLF & _
" ..." & @CRLF & _
"#ce" & @CRLF & _
" #ce" & @CRLF & _
"#ce" & @CRLF & _
"#ce" & @CRLF & _
";#ce" & @CRLF & _
"#ce" & @CRLF & _
"#ce" & @CRLF & _
"-------------------------------------" & @CRLF & _
"#comments-start BON" & @CRLF & _
" ..." & @CRLF & _
"#" & @CRLF & _
" #cs" & @CRLF & _
" ..." & @CRLF & _
" #cs" & @CRLF & _
" ..." & @CRLF & _
" #ce" & @CRLF & _
"#ce" & @CRLF & _
"..." & @CRLF & _
"#ce" & @CRLF & _
"-------------------------------------" & @CRLF & _
"#comments-start BON" & @CRLF & _
" ..." & @CRLF & _
"#" & @CRLF & _
" #comments-start" & @CRLF & _
" ..." & @CRLF & _
" #cs" & @CRLF & _
" ..." & @CRLF & _
"#comments-end" & @CRLF & _
" #ce" & @CRLF & _
"..." & @CRLF & _
"#comments-end " & @CRLF & _
"#comments-end" & @CRLF & _
"-------------------------------------" & @CRLF & _
" #cs" & @CRLF & _
";#cs" & @CRLF & _
";#ce" & @CRLF & _
"#ce u u u u " & @CRLF & _
"" & @CRLF & _
" #cs" & @CRLF & _
";#cs" & @CRLF & _
";#ce" & @CRLF & _
"#ce u u u u" & @CRLF & _
"" & @CRLF & _
" #cs" & @CRLF & _
";#cs" & @CRLF & _
";#ce" & @CRLF & _
"#ce u u u u " & @CRLF & _
"" & @CRLF & _
" #cs" & @CRLF & _
";#cs" & @CRLF & _
";#ce" & @CRLF & _
"#ce " & @CRLF & _
"" & @CRLF & _
" #cs" & @CRLF & _
";#cs" & @CRLF & _
";#ce" & @CRLF & _
"#ce i" & @CRLF & _
"" & @CRLF & _
" #cs" & @CRLF & _
";#cs" & @CRLF & _
";#ce" & @CRLF & _
"#ce i" & @CRLF & _
"" & @CRLF & _
" #cs" & @CRLF & _
";#cs" & @CRLF & _
";#ce" & @CRLF & _
"#ce i " & @CRLF & _
"" & @CRLF & _
"-------------------------------------" & @CRLF & _
"" & @CRLF & _
"#cs,test" & @CRLF & _
" ..." & @CRLF & _
"#cs..." & @CRLF & _
" .#cs.. NE_PAS_CAPTURER" & @CRLF & _
"#ceNE_PAS_CAPTURER" & @CRLF & _
" ..." & @CRLF & _
"#ce" & @CRLF & _
"#ce" & @CRLF & _
"#ce" & @CRLF & _
"" & @CRLF & _
"-------------------------------------" & @CRLF & _
"" & @CRLF & _
"#cs" & @CRLF & _
"#ce" & @CRLF & _
"" & @CRLF & _
"#comments-start" & @CRLF & _
" ..." & @CRLF & _
" #" & @CRLF & _
" #cs" & @CRLF & _
" #cs" & @CRLF & _
" ..." & @CRLF & _
" #cs---" & @CRLF & _
" ..." & @CRLF & _
"#" & @CRLF & _
" # ce NE_PAS_CAPTURER" & @CRLF & _
" #ce" & @CRLF & _
" #ce" & @CRLF & _
"#ce" & @CRLF & _
" #ce" & @CRLF & _
"#ce" & @CRLF & _
"" & @CRLF & _
"..." & @CRLF & _
"-------------------------------------" & @CRLF & _
"--------- [NE PAS CAPTURER] ---------" & @CRLF & _
"#ce" & @CRLF & _
"" & @CRLF & _
"#ce" & @CRLF & _
"#ce" & @CRLF & _
"" & @CRLF & _
"#cs" & @CRLF & _
"" & @CRLF & _
"#cs" & @CRLF & _
"#cs" & @CRLF & _
"" & @CRLF & _
"#cs" & @CRLF & _
"#cs" & @CRLF & _
"#cs" & @CRLF & _
""
Local $sSubst = "[\1]<span class="S2">\2</span>[\3]"
Local $sResult = StringRegExpReplace($sString, $sRegex, $sSubst)
MsgBox($MB_SYSTEMMODAL, "Result", $sResult)
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 AutoIt, please visit: https://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm