To be specific: It matches the possible initial letters of the numbers and avoids ambiguity between joined numbers.
IE:
Q: Why do we need to say “one”? why not just “o”?
A: Because “o” would put a space in the middle of “four”.
Q: Okay, but no other number has “on” in it, so we can match on that.
A: Except if you have a 0 followed by a 9, the string would read “zeronine”. This is the same reasoning why you cant search for “ne” either (seveneight), and must search for the full “one”.
EDIT: Actually “ne” gets removed by the first logic pattern, as “nine” contains ne. But you get the point.