正規表示式匹配

2021-09-09 06:19:29 字數 1060 閱讀 6833

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

首先,考慮特殊情況:

兩個字串都為空,返回true

當第乙個字串不為空,而第二個字串為空,返回false(因為這樣,就無法匹配成功了,而如果第乙個字串為空了,第二個字串非空,有可能匹配成功,比如第二個字串是 「a*a*a*a*」, 『*』 之前的元素可以出現0次)

之後就開始匹配第乙個字元,這裡有兩種可能:匹配成功或匹配失敗。但考慮到pattern下乙個字元可能是 『*』 ,這裡我們分兩種情況討論:pattern下乙個字元為 『*』 或不為 『*』 :

pattern下乙個字元不為『*』:直接匹配當前字元。如果匹配成功,繼續匹配下乙個;如果匹配失敗,直接返回false。

這裡的「匹配成功」有兩種情況,第一:兩個字元相同,第二:pattern的當前字元為『.』,同時str的當前字元不為『\0』。

class solution 

//pattern中下乙個字元是'*'

else}}

;

在 pattern中下乙個字元是 『*』,且當前字元匹配時

return match(str+1, pattern)|| match(str, pattern+2);

之所以match(str, pattern+2),是因為可能出現匹配過了的情況,

例子:「aaa」,「a*a」

pattern的第乙個字元匹配到了ptr的第三個字元,

所以需要:

return match(str+1, pattern)|| match(str, pattern+2);

pattern的當前字元繼續匹配與跳過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...