* 匹配1個或多個
?匹配乙個
abc a*b false
abc a?c true
abc a* true
ab a** false
重點就是處理掉*,如果匹配的時候 * 後面沒有字元了那返回真,如果有的話,那麼很簡單,
從str中從後往前拿pattern 中 從*開始到pattern末尾個字元個數的字元,繼續遞迴匹配就搞定了。
如 a*b abc
拿(b,c) 遞迴
如 a*bb abc 這裡直接return false , 因為 bb 的個數大於 src 中剩餘的個數。
如a*b abbbbc 這裡拿 (b,c)遞迴
如a*c abc 拿 (c,c)遞迴即可
int
match(const
char *str, const
char *pattern)
while (*str || *pattern)
if (*pattern == '?')
continue;
if (*pattern!='*')
return
0; if (*str==0)
return
0; // 到這裡只要是*str ==0 必定false ,因為無論 ab a** 還是 ab abc都false
temp = ++pattern;
if (*temp == 0)
return
1; while (*temp)
while (--length && end != str)
if (end == str)
return
0; return
match(end, pattern);
}if (*str == *pattern)
return
1; else
return
0;}
正則匹配字串無匹配不到 字串匹配演算法
我們先說下定義,比如說我們要在a字串中查詢字串b,那麼a就是主串,b就是模式串 我們把主串的長度記為n,把模式串的長度記為m,n m bf brute force 中文名 暴力匹配演算法,樸素匹配演算法 簡單的說bf的演算法就是在主串中查詢起始位置是0,1,2,n m個且長度為m的n m 1個子串,...
正則匹配字串小記
需求1.現有 裝置名 dev.json 裝置名 廠商名 型號名 dev.json 裝置名.json 廠商名 型號名.json 型號名 廠商名.json 裝置名 廠商名 bu.json 等字串,要求匹配出符合規則的字串,並且根據傳入的裝置名或者廠商名或者型號名講字串中對應的內容修改。裝置名 字串規則 ...
正則匹配常見字串
字母開頭的n位包含只包含數字字母的 w對於 unicode str 樣式 匹配unicode詞語的字元,包含了可以構成詞語的絕大部分字元,也包括數字和下劃線。如果設定了 ascii 標誌,就只匹配 a za z0 9 對於8位 bytes 樣式 匹配ascii字元中的 a za z0 9 impor...