I’ll try to explain this with Obsidian’s search examples. The same applies to the Text Expand plugin cause it’s based on Obsidian’s search.
A match is obtained when the regex definition is found inside the content. The matched text, the characters that correspond to the regex definition, are returned.
In Obsidian, when you search for block:(breath bless), you are not specifying a regex, so it’s up to Obsidian’s code how to deal with it - I think it is converted to some kind of regex, though. Anyway, you get certain files matched, but the matched text returned is just “breath” or “bless” in each case.

Now, when you use a regex like block:(/.*(breath.+bless|bless.+breath).*/) you are specifying a /regex/ between forward slashes.

Note: the block: part is a feature provided by Obsidian, not regexes.
In regex notation:
- the
. is matching any character (except for line terminators), and
-
* matches the previous token between zero and unlimited times, as much as possible
This regex is matching further more than just the words “breath” or “bless”. It’s considering the text before and after those words. So, in this case, the matched text returned is the whole “block”.
Hope I’ve been clear, because it’s not a simple topic. If you are interested, start with something like https://regexone.com/ and experiment on https://regex101.com/.