实现正则表达式的*和?匹配
生活随笔
收集整理的這篇文章主要介紹了
实现正则表达式的*和?匹配
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前幾天在用grep的時候,發現grep的*居然支持得有問題,并不能得到期望的結果,于是花了點時間,來實現正則表達式的×匹配,下面的這個函數可以匹配*,?。
代碼很簡短,但是很有效率。
bool match_star(const char* text,const char* pattern) {const char *cp = text;const char* pp = pattern;const char *ps1, *ps2;if ( !*pattern )return true;while (*cp){ps1 = cp;ps2 = pp;while ( *ps1 && *ps2){if(*ps2 == '*'){cp = ps1 - 1;pp = ps2+1;break;}else if(0 == (*ps1-*ps2) || *ps2 == '?'){ps1++;ps2++;}else{break;}}if (!*ps2){return true;}cp++;}return false; }
在Windows VC2010和Linux G++上測試通過。
在實現匹配×的時候,使用了一個技巧,即相當于重新對兩個新的字符串進行比較,拋棄了已經比較過的內容。
比如字符串是1234567890,模式串是1*23*0以及1?3等都可以匹配成功。
如有問題,懇請指正,多謝!
總結
以上是生活随笔為你收集整理的实现正则表达式的*和?匹配的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 改变vim注释的颜色
- 下一篇: [搜索]波特词干(Porter Stre