This might work for you:
<triggers>
<trigger
enabled="y"
lines_to_match="2"
match="(?s)^.* attacked you with.*\."
multi_line="y"
regexp="y"
send_to="12"
sequence="100"
>
<send>
local line = [===[%0]===]
line = string.gsub (line, "\\n", "")
print ("Combined line:", line)
who, weapon, place = string.match (line, "^(.-) attacked you with a (.-) and hit your (.-)%.$")
if not who then
print "No match"
return
end -- if
print ("Who:", who)
print ("With what:", weapon)
print ("Where:", place)
</send>
</trigger>
</triggers>
For advice on how to copy the above, and paste it into MUSHclient, please see
Pasting XML.
What this is doing is using a two-line multi-line trigger to detect both lines. We have to cut down the regular expression in the trigger to just detect "this sort of" line. The final period in the match text is to make it stop when it hits the period at the end of the sentence. The "(?s)" in the regexp tells it to include newlines in the "dot" match.
Then the Lua code gets rid of the newline (if any) and then does a string.match to re-parse the line and extract out the attacker, weapon and place it hits.
Example output from your test data:
Combined line: An Ugly and Stinking Ogre attacked you with a club and hit your arm.
Who: An Ugly and Stinking Ogre
With what: club
Where: arm
The only trouble with this is would be a single-line attack, because the two-line trigger will wait for both lines. For that case you might want to use your original trigger (that matches a single line) to handle that case, and make that a lower sequence number, so that it stops this second multi-line trigger from trying to evaluate.