I like to test a dialog tag by putting the tag into a question like this:
What did he <tag>
?
If the question makes sense, and if you would answer the question with words, the tag is probably okay.
For example:
What did he say?
That's a meaningful question, and you'd answer it with words. So say is legit as a dialogue tag.
On the other hand:
What did he laugh?
This fits only in the very rare case where the person is uttering the words as laughs.
Mostly, people don't laugh words.
So laugh doesn't (usually) work as a dialogue tag.
What did he sigh?
Same as laugh.
The examples you chose are interesting ones.
Each action involves exhalation,
so it's possible to utter words as part of the exhalation.
And when the words are uttered as part of the exhalation,
I'm okay with them as dialogue tags.
But unless you mean "he uttered the words while exhaling in this way,"
the tag doesn't seem technically correct.
Another fun one:
"Apoplexy," he belched.
In the examples you gave,
there is a simple fix that involves no extra words,
no extra characters.
You can simply change the comma to a period.
"Oh." He laughed. "Sorry, ..."
This makes the action separate from the uttering.
Of course, this means that it is no longer a dialogue tag.
Also, it (in my mind) shifts the rhythm ever so slightly,
suggesting a slightly longer beat between "oh" and "sorry."