正则表达式匹配是一种用来检测一个字符串是否与特定模式匹配的工具。在这里,我们将使用 . 和 * 来支持特殊的匹配规则。
. 匹配任何单个字符。
- 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 和 "zoo"。* 等价于 {0,}。
为了实现这个正则表达式匹配,我们可以使用递归的方法,并使用两个指针来遍历字符串 s 和规则 p。我们从左到右依次检测每个字符,如果当前字符匹配,则继续往后检测,如果不匹配则返回 false。
在检测每个字符时,我们还需要考虑 . 和 * 的特殊情况。对于 . ,我们只需要判断它是否是字符串 s 中的一个字符即可。对于 * ,我们需要递归地调用函数并假设它匹配了 0 个或多个字符,如果匹配成功则返回 true。
代码实现如下:
``` bool isMatch(string s, string p) { if (p.empty()) return s.empty(); bool first_match = (!s.empty() && (s[0] == p[0] || p[0] == '.'));
if (p.size() >= 2 && p[1] == '*') {
return (isMatch(s, p.substr(2)) || (first_match && isMatch(s.substr(1), p)));
} else {
return first_match && isMatch(s.substr(1), p.substr(1