I see some simplifications:
/e(?<!ste)/ means find a e and put the cursor right after it, then read the three letters before the cursor (e included) and check that this is not "ste". This is simply "a e not following st", so /(?<!st)e/ (only slightly shorter, but that's several chars overall)
/is(?<!ste)/ isn't very useful, if you put the match cursor right behind "is", the previous three letters obviously can't be "ste".
(?=PATTERN) makes perl check what's next without moving the match cursor. $ already check that what's next is the end of the string or of a line without moving the cursor. So (?=$) and $ mean the same thing.