/^From:\s*"\Q$NAME\E".*$ \s*
^To:\s*<sip:\Q$INBOUND_NUMBER\E@.*$ \s*
^Call-ID:\s*(.*)/mgx
And the idea behind:
- Use ^, $ and //m as line delimiter - we search for three lines: /^something$ \s* ^something2$ \s* ^something3$/m. That assures the regexp will match nearest three lines and not first, second and 300th line. I don't understand why after $ and before ^ regexp must have \s* to catch any newline characters (notice that you don't have to worry which system you are working on, which line delimiters you have, just \s*). It seems $ matches the place right before newline character.
- Now that three parts of regexp are limited to single line (I like that limitation and try to achieve it every time to avoid //s), let's limit variables: I suggest to limit $NAME by "" and $INBOUND_NUMBER by 'sip:' and '@'. That will assure regexp won't match on $NAME="Kevin Black" when there is 'From: "Kevin Blackwood"'