#include <StringConstants.au3> ; to declare the Constants of StringRegExp
#include <Array.au3> ; UDF needed for _ArrayDisplay and _ArrayConcatenate
Local $sRegex = "(?i)(?:having\s*?[^\s]+\s*?[^\w\s])"
Local $sString = "=== libinjection tests ===" & @CRLF & _
"" & @CRLF & _
"1 I like having true friends" & @CRLF & _
"I like having true friends" & @CRLF & _
"I having true friends" & @CRLF & _
"I was having true friends" & @CRLF & _
"1 having" & @CRLF & _
"Family and friends having meal outdoors" & @CRLF & _
"" & @CRLF & _
"=== FP ===" & @CRLF & _
"" & @CRLF & _
"1 I like having true, friends" & @CRLF & _
"1 having test, test" & @CRLF & _
"Family and friends having meal, outdoors" & @CRLF & _
"having test , test" & @CRLF & _
"having test test," & @CRLF & _
"" & @CRLF & _
"=== SQL ===" & @CRLF & _
"" & @CRLF & _
"8' GROUP BY ID_ARTICLE HAVING COUNT(ID_ARTICLE) = '2'" & @CRLF & _
"8' GROUP BY ID_ARTICLE HAVING 1 = 1" & @CRLF & _
"8' GROUP BY ID_ARTICLE HAVING 1," & @CRLF & _
"8' GROUP BY ID_ARTICLE HAVING true," & @CRLF & _
"" & @CRLF & _
"FROM Sales.SalesOrderDetail GROUP BY SalesOrderID HAVING SalesOrderID > 50000" & @CRLF & _
"" & @CRLF & _
"-3223%'))) OR 1 GROUP BY CONCAT(0x716a787a71,(SELECT (CASE WHEN (3900=3900) THEN 1 ELSE 0 END)),0x7171627671,FLOOR(RAND(0)*2)) HAVING MIN(0)#"" & @CRLF & _
" -2906%' OR 1 GROUP BY CONCAT(0x716a787a71,(SELECT (CASE WHEN (3900=3900) THEN 1 ELSE 0 END)),0x7171627671,FLOOR(RAND(0)*2)) HAVING MIN(0)#"" & @CRLF & _
" -2836%00' OR 1 GROUP BY CONCAT(0x716a787a71,(SELECT (CASE WHEN (3900=3900) THEN 1 ELSE 0 END)),0x7171627671,FLOOR(RAND(0)*2)) HAVING MIN(0)#"" & @CRLF & _
" -8115 OR 1 GROUP BY CONCAT(0x716a787a71,(SELECT (CASE WHEN (3900=3900) THEN 1 ELSE 0 END)),0x7171627671,FLOOR(RAND(0)*2)) HAVING MIN(0)#"" & @CRLF & _
" -2949 OR 1 GROUP BY CONCAT(0x716a787a71,(SELECT (CASE WHEN (3900=3900) THEN 1 ELSE 0 END)),0x7171627671,FLOOR(RAND(0)*2)) HAVING MIN(0)#"" & @CRLF & _
" -4609) WHERE 5091=5091 OR 1 GROUP BY CONCAT(0x716a787a71,(SELECT (CASE WHEN (3900=3900) THEN 1 ELSE 0 END)),0x7171627671,FLOOR(RAND(0)*2)) HAVING MIN(0)#"" & @CRLF & _
"1 having 1=1" & @CRLF & _
"" & @CRLF & _
"1 having 1" & @CRLF & _
"" & @CRLF & _
"1 having 1=1" & @CRLF & _
"1 having id=id" & @CRLF & _
"I am having trouble -.-" & @CRLF & _
"" & @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