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:]
注意處理邊界值的情況,s
和p
為空串時
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 給定乙個字...