Am 08.03.22 um 17:54 schrieb jaydeepjd.8914@xxxxxxxxx: > So, the final regexes are these, right?: Not quite. > > "[a-zA-Z_][a-zA-Z0-9_]*" > /* hexadecimal and binary numbers */ > "|0[xXbB][0-9a-fA-F_]+[lLuU]*" > /* integers and floats */ > "|[0-9][.]?[0-9_]+([Ee][-+]?[0-9]+)?[fFlLuU]*" This would not match 12.5 because you allow only a single digit before the decimal point. Perhaps "|[0-9][.0-9_]*([Ee][-+]?[0-9]+)?[fFlLuU]*" > /* floating point numbers beginning with decimal point */ > "|[.][0-9][0-9_]*([Ee][-+]?[0-9]+)?[fFlL]?" > /* unary and binary operators */ > > "|[-+*/<>%&^|=!]?==?|--|\\+\\+|<<=|>>=|&&|[||]|->|\\.\\*|!!|::|[?:.][.:]"), [||] does not work as you intend. A new suggestion: do not start with an initial optional character in order to reduce the number of backtrackings that the regular expression evaluation has to do. I would write this line as "|[-+*/<>%&^|=!]==?|--|\\+\\+|<<=|>>=|&&|\\|\\||->|\\.\\*|!!|::|[?:.][.:]"), BTW which operators are handled by "[?:.][.:]"? I'm asking because you list :: separatly that would also be matched by this sub-expression. -- Hannes