10. Regular Expression Matching (Hard)