#include <StringConstants.au3> ; to declare the Constants of StringRegExp
#include <Array.au3> ; UDF needed for _ArrayDisplay and _ArrayConcatenate
Local $sRegex = "(?iJxm)^[^\S\r\n]*" & @CRLF & _
" (?:" & @CRLF & _
" \s* (?<section>\[[^\]]*\]) [^\S\r\n]* (?<comment>(?:[#;].*)?)" & @CRLF & _
" | (?<comment>(?:[#;].*)?)" & @CRLF & _
" | (?:" & @CRLF & _
" (?<key>[^#;]+?)" & @CRLF & _
" \s* = [^\S\r\n]*" & @CRLF & _
" (?:" & @CRLF & _
" (?:" & @CRLF & _
" "(?<value_quote>.*)"" & @CRLF & _
" | (?<value>(?:[^#;\r\n\\\s]*[\s]??(?:\\.)*)*)" & @CRLF & _
" ) [^\S\r\n]* (?<comment>(?:[#;].*)?)" & @CRLF & _
" )" & @CRLF & _
" )" & @CRLF & _
" | (?<error>.*)" & @CRLF & _
" )" & @CRLF & _
"$"
Local $sString = ";An orphan comment at the top of the file" & @CRLF & _
" #Another orphan comment" & @CRLF & _
"" & @CRLF & _
"#Comment above a group" & @CRLF & _
"[Group1] #Group comment 1" & @CRLF & _
"Key1=Value1#Comment 1" & @CRLF & _
"Key2=Value 2" & @CRLF & _
"Key 3=Value 3" & @CRLF & _
" Key 4=Value4" & @CRLF & _
"Key5=Value \#5;Comment 2" & @CRLF & _
"" & @CRLF & _
";Another comment above a group" & @CRLF & _
" [Group 2] ;Group comment 2" & @CRLF & _
"Key1 = Value1 #Comment 3" & @CRLF & _
"Key2 = Value 2" & @CRLF & _
"Key 3 = Value 3" & @CRLF & _
"Key 4 = Value4" & @CRLF & _
" Key 5 = Value\;5 ;Comment 4" & @CRLF & _
" Key 6 = Value\;6\#1 ;Comment 5" & @CRLF & _
" Key 7 ;Comment 6" & @CRLF & _
" Key 8 = Value;7 \\;Comment 7" & @CRLF & _
" Key 8 =;Comment 7" & @CRLF & _
" Key 9 = Value\\;8 ;Comment 8" & @CRLF & _
"" & @CRLF & _
"" & @CRLF & _
"" & @CRLF & _
"; with quotes" & @CRLF & _
"" & @CRLF & _
";An orphan comment at the top of the file" & @CRLF & _
" #Another orphan comment" & @CRLF & _
"" & @CRLF & _
"#Comment above a group" & @CRLF & _
"[Group1] #Group comment 1" & @CRLF & _
"Key1="Value1"#Comment 1" & @CRLF & _
"Key2="Value 2"" & @CRLF & _
"Key 3="Value 3" " & @CRLF & _
" Key 4="Value4"" & @CRLF & _
"Key5="Value \#5";Comment 2" & @CRLF & _
"" & @CRLF & _
";Another comment above a group" & @CRLF & _
" [Group 2] ;Group comment 2" & @CRLF & _
"Key1 = "Value1" #Comment 3" & @CRLF & _
"Key2 = "Value 2"" & @CRLF & _
"Key 3 =" Value 3"" & @CRLF & _
"Key 4 = "Value4"" & @CRLF & _
" Key 5 = "Value\;5 ;Comment 4"" & @CRLF & _
" Key 6 = "Value\;6\#1 ";Comment 5" & @CRLF & _
" Key 7 ;Comment 6" & @CRLF & _
" Key 8 = "Value;7 \";Comment 7" & @CRLF & _
" Key 8 ="";Comment 7" & @CRLF & _
" Key 9 = "Value\\";8 ;Comment 8" & @CRLF & _
""
Local $aArray = StringRegExp($sString, $sRegex, $STR_REGEXPARRAYGLOBALFULLMATCH)
Local $aFullArray[0]
For $i = 0 To UBound($aArray) -1
_ArrayConcatenate($aFullArray, $aArray[$i])
Next
$aArray = $aFullArray
; Present the entire match result
_ArrayDisplay($aArray, "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 AutoIt, please visit: https://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm