#include <MsgBoxConstants.au3> ; to declare the Constants of MsgBox
Local $sRegex = "(?xsm) # free-spacing mode, multi-line" & @CRLF & _
"(?=.*?pig) # fail right away if pig isn't there" & @CRLF & _
"(?=" & @CRLF & _
"( # Group 1" & @CRLF & _
" (?: # skip one line that doesn't have pig" & @CRLF & _
" ^ # beginning of line" & @CRLF & _
" (?:(?!pig)[^\r\n])* # zero or more chars not followed by pig" & @CRLF & _
" (?:\r?\n) # newline chars" & @CRLF & _
" ) " & @CRLF & _
" (?:(?1)|[^:]+) # recurse Group 1 OR match all chars that are not a :" & @CRLF & _
" (:\d+) # match a sequence of digits" & @CRLF & _
")? # End Group 1" & @CRLF & _
") # End lookahead. Group 1, if set, now contains the number of lines skipped" & @CRLF & _
".*?\Kpig # match pig" & @CRLF & _
"(?=.*?(?(2)\2):(\d+))"
Local $sString = "my cat pi g" & @CRLF & _
"dog pi g" & @CRLF & _
"my pig" & @CRLF & _
"my cow" & @CRLF & _
"my mouse" & @CRLF & _
"" & @CRLF & _
":1:2:3:4:5:6:7"
Local $sSubst = "\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