正規表示式的匹配

2021-08-21 06:19:49 字數 1833 閱讀 9379

請實現乙個函式來匹配包括』.』和』『的正規表示式,其中匹配是指字串的所有字元匹配整個模式串。具體匹配規則如下:模式串中的字元』.』表示任意乙個字元,而』『表示它前面的字元可以出現任意次(包含0次。例如,字串」aaa」與模式」a.a」和」ab*ac*a」匹配,但是與」aa.a」和」ab*a」均不匹配。

為了方便說明,str 表示字串,pattern 表示模式串

bool match_core (char *str, char *pattern);

1、首先考慮遞迴出口:

當 *str == '\0' && *pattern == '\0' 時,即 str 和 pattern 都是空串時,我們說它們是匹配的,返回 true;

當 *str != '\0' && *pattern == '\0',str 無法完成匹配,返回 false.

【注意】當 *str =='\0' && *pattern != '\0' 時,是有可能匹配成功的,比如:pattern 為 a*,而 str 為空串時,是可以匹配成功的。因為 『*』 前面的字元 a 可以出現0次。

2、我們可以將匹配過程分為兩類:一類是(pattern + 1) != 『『;另一類是(pattern + 1) == 『『,下面基於這兩種情況討論該問題的具體實現:

當*(pattern + 1) != '*' 時,只要 *str 與 *pattern 匹配,兩個字串分別向前移動一步。即:

若 *str == *pattern, 則 match_core (str + 1, pattern + 1);

若 *str != '\0' && *pattern == '.',則 match_core (str + 1, pattern + 1);

若 *str 和 *pattern 不滿足上述兩個條件,說明 *str 和 *pattern 不匹配,直接返回 false。

當 *(pattern + 1) == '*' 時,根據 *pattern 與 *str 匹配的個數,可以分為下面幾種情況:

若匹配個數為0,即 *pattern 與 *str 不匹配,則match_core (str, patten + 2);

若匹配個數為 1 個或多個,我們只需要每次將 str 向前移一步,pattern 保持原來的位置,繼續做下一輪匹配,即match_core (str + 1, pattern)。

我們考慮這種情況:str = 「aaaaa」, pattern = 「aa*a」,按照題目敘述的匹配原則,str 與 pattern 應該是匹配的,但是按照我們剛才分析的思路走下來,match_core返回的是false,分析明顯是由漏洞的,我們再來看看(pattern + 1) == 『『中匹配個數是多個的情況,我們不僅要考慮 str + 1 與 pattern 的匹配, 還要考慮到 str 與 pattern + 2 的匹配情況,只要這兩種情況中的任何一種匹配成功, str 和 pattern 都算是匹配成功。

//正規表示式匹配核心部分

bool match_core (char *str, char *pattern)

if (*str != '\0' && *pattern == '\0')

//下面來分析pattern沒有走完的情況

if (*(pattern + 1) != '*')

else

}else

else

}}bool

match (char *str, char *pattern)

if (str == null || pattern == null)

return match_core (str, pattern);

}

正規表示式 匹配

字串 void abtr quint32 ab 表示乙個正規表示式 template class bidirectionaliterator class allocator std allocator sub match bidirectionaliterator class match resul...

正規表示式匹配

請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 解法 首先要想到用遞迴處理...

正規表示式匹配

請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 class solutio...