I think I see the problem now. Each query term has to be a separate argument on the command line.
/opt/alertmanager/amtool --alertmanager.url="$ENDPOINT" alert query 'alertname=DiskFull95 alertname=DiskFull95' # does not work (no results; I think it treats this as alertname="DiskFull95 alertname=DiskFull95")
/opt/alertmanager/amtool --alertmanager.url="$ENDPOINT" alert query 'alertname=DiskFull95' 'alertname=DiskFull95' # works
Hence this works:
/opt/alertmanager/amtool --alertmanager.url="$ENDPOINT" alert query 'alertname=~"Disk.+"' 'alertname=~".+Full.+"'
Since you put
amtool ... alert query "$QUERY_STRING"
then the multi-word value is passed as a single argument.
Removing the quotes will allow the shell to split it and pass it as separate arguments:
amtool ... alert query $QUERY_STRING
Tested:
QUERY_STRING='alertname=~"Disk.+" alertname=~".+Full.+"'
/opt/alertmanager/amtool --alertmanager.url="$ENDPOINT" alert query "$QUERY_STRING" # does not work (error about unescaped quotes)
/opt/alertmanager/amtool --alertmanager.url="$ENDPOINT" alert query $QUERY_STRING # works