手動實現 正規表示式匹配函式

2021-09-16 20:35:24 字數 1771 閱讀 1057

regular expression matching

some examples:

ismatch("aa","a") → false

ismatch("aa","aa") → true

ismatch("aaa","aa") → false

ismatch("aa", "a*") → true

ismatch("aa", ".*") → true

ismatch("ab", ".*") → true

ismatch("aab", "c*a*b") → true

ismatch('bbbba', '.*a*a') → true

ismatch('a', '.*..a*') → false

ismatch('a', 'ab*') → true

ismatch('ab', '.*c') → false

使用迭代,當p[1] != '*'每次判斷p[0] == s[0]後令s = s[1:], p = p[1:]

p[1] == '*'時特殊處理,注意*可以代表0到多個*之前乙個的字元

p[1] == '*'時,迴圈判斷*代表多少個*之前乙個的字元,如果s可以匹配*之後的模式,返回true,否則s = s[1:]

注意處理邊界值的情況,sp為空串時

class solution(object):

def matchchar(self, sc, pc):

return sc == pc or pc == '.'

def isendofstar(self, p):

while p != '':

if len(p) == 1 or len(p) > 1 and p[1] != '*':

return false

p = p[2:]

return true

def ismatch(self, s, p):

if p == '':

return s == ''

if s == '':

return self.isendofstar(p)

if (len(p) > 1 and p[1] != '*') or len(p) == 1:

# without *

if not self.matchchar(s[0], p[0]):

return false

else:

return self.ismatch(s[1:], p[1:])

else:

# with *

# try see x* is empty

if self.ismatch(s[0:], p[2:]):

return true

# x* 可以 代表 x 一到多次

while self.matchchar(s[0], p[0]):

s = s[1:]

if self.ismatch(s, p[2:]):

return true

if s == '':

return self.isendofstar(p)

return false

c 實現正規表示式匹配

c 11之後封裝了自己的正規表示式,直接包含檔案即可使用,利用regex類宣告物件初始化正規表示式,regex expressionname 正規表示式 正規表示式具體語法參考這裡 regex match 方法進行匹配,匹配成功返回1,失敗返回0 cmatch和smatch類分別存放char 和st...

RegexKitLite實現正規表示式

可以使用第三方工具 regexkitlite 來實現正規表示式。1regexkitlite 類庫,regexkitlite 將regexkitlite.h regexkitlite.m 兩個檔案新增到您的專案中 2 在您的工程中新增 libicucore.dylib frameworks 3 在您要...

實現正規表示式處理功能

在介紹正規表示式之前,我先說一下有限自動機的概念,呃,先舉個例子吧,請看 include include using namespace std enum tokentype int dfa table 37 s0 起始狀態 s1 到這裡說明是數字 s2 變數 s4 這是if match 給定乙個字...