To respond to part of your post,
Regex.isMatch() in B4A matches a string, not an expression. The expression is supplied in the guise of a string following certain "rules" (hence, regular), but it is evaluated differently than a string of characters. In the same way an array of bytes is evaluated differently depending on what's expected as the payload.
By default, Regex works on lines of text. What it understands by "lines" is key. Basically, it's what we think of as a line of text, but there's a lot more going on (which you will learn).
You'll want Regex.Matcher() to de[ea]l with expressions. Then you test for success and, optionally, perform substitutions. If you try to go right to success (eg. if Regex.Matcher("pattern","string").Find), you potentially lose the ability to carry out some substitution. But you would be able to report success, if nothing else.
The Regex.Matcher("pattern","string") method, captures and stores whatever matches there may have been. In your example, matching "deel" or "deal" are 2 different matches, which could result in 2 different substitutions. To do that, you have to use Regex.Matcher() and loop your way through the string,
performing the appropriate substitution as necessary, based on each so-called "group" matched. The Matcher keeps track of these groups.