中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

正則表達式模式匹配字符串基礎(chǔ)知識有哪些

這篇文章將為大家詳細講解有關(guān)正則表達式模式匹配字符串基礎(chǔ)知識有哪些,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

在墊江等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計制作按需規(guī)劃網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都營銷網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站制作,墊江網(wǎng)站建設(shè)費用合理。

匹配字符串的基本規(guī)則

1. 匹配固定的字符串

regex e("abc");

2. 匹配固定字符串,不區(qū)分大小寫

regex e("abc", regex_constants::icase);

3. 匹配固定字符串之外多一個字符,不區(qū)分大小寫

regex e("abc.", regex_constants::icase);  // .  Any character except newline. 1個字符

4. 匹配0個或1個字符

regex e("abc?");    // ?  Zero or 1 preceding character. 匹配?前一個字符

5. 匹配0個或多個字符

regex e("abc*");    // *  Zero or more preceding character. 匹配*前一個字符

6. 匹配1個或多個字符

regex e("abc+");    // +  One or more preceding character. 匹配+前一個字符

7. 匹配特定字符串中的字符

regex e("ab[cd]*");    // [...] Any character inside square brackets. 匹配[]內(nèi)的任意字符

8. 匹配非特定字符串的字符

regex e("ab[^cd]*");    // [...] Any character not inside square brackets. 匹配非[]內(nèi)的任意字符

9. 匹配特定字符串,且指定數(shù)量

regex e("ab[cd]{3}");    // {n}  匹配{}之前任意字符,且字符個數(shù)為3個

10. 匹配特定字符串,指定數(shù)量范圍

regex e("ab[cd]{3,}");  // {n} 匹配{}之前任意字符,且字符個數(shù)為3個或3個以上
regex e("ab[cd]{3,5}");  // {n} 匹配{}之前任意字符,且字符個數(shù)為3個以上,5個以下閉區(qū)間

11. 匹配規(guī)則中的某一個規(guī)則

regex e("abc|de[fg]");    // |  匹配|兩邊的任意一個規(guī)則

12. 匹配分組

regex e("(abc)de+");    // ()       ()表示一個子分組

13. 匹配子分組

regex e("(abc)de+\\1");  // ()    ()表示一個子分組,而\1表示在此位置匹配第一個分組的內(nèi)容
regex e("(abc)c(de+)\\2\\1");  // \2 表示的是在此匹配第二個分組的內(nèi)容

14. 匹配某個字符串開頭

regex e("^abc."); 
// ^ begin of the string 查找以abc開頭的子字符串

15. 匹配某個字符串結(jié)尾

regex e("abc.$");
// $ end of the string 查找以abc結(jié)尾的子字符串

      以上是最基本的匹配模式的書寫。通常如果要匹配特定的字符,需要使用\進行轉(zhuǎn)義,比如在匹配字符串中需要匹配".",那么在匹配字符串中應(yīng)該在特定字符前加上\。出了以上的基本規(guī)則,如果還不滿足特定的需要,那么可以參考此鏈接。使用了解基本的匹配模式后,需要使用正則表達式進行匹配、查找或者替代。

正則匹配、查找與替代

      書寫好模式字符串后,需要將待匹配的字符串和模式字符串進行一定規(guī)則的匹配。包括三種方式:匹配(regex_match)、查找(regex_search)、替換(regex_replace)。

      匹配很簡單,直接將待匹配字符串和模式字符串傳入到regex_match中,返回一個bool量來指明待匹配的字符串是否滿足模式字符串的規(guī)則。匹配整個str字符串。

bool match = regex_match(str, e);
// 匹配整個字符串str

      查找是在整個字符串中找到和滿足模式字符串的子字符串。也就是只要str中存在滿足模式字符串就會返回true。

bool match = regex_search(str, e);
// 查找字符串str中匹配e規(guī)則的子字符串

      但是很多情況下,光是返回一個是否匹配的bool量是不夠的,我們需要拿到匹配的子字符串。那么就需要在模式字符串中將匹配字符串分組,參考【匹配字符串的基本規(guī)則】第12點。再將smatch傳入到regex_search中,就可以獲得滿足每個子分組的字符串。

smatch m;
bool found = regex_search(str, m, e);
for (int n = 0; n < m.size(); ++n)
  {
    cout << "m[" << n << "].str()=" << m[n].str() << endl;
  }

    替換也是基于模式字符串在分組情況下完成的。

cout << regex_replace(str, e, "$1 is on $2");

      此時,會在滿足分組1和分組2的字符串中間加上“ is on”。

      以上三個函數(shù)有很多版本的重載,可以滿足不同情況下的需求。

實戰(zhàn)

      要求:找出滿足sectionA("sectionB")或者sectionA ("sectionB")的模式字符串。且分離出sectionA、sectionB。sectionA和sectionB不會出現(xiàn)數(shù)字,字符可大小寫,至少有一個字符。

      分析:根據(jù)要求,大致可分為兩個部分,也就是sectionA和sectionaB。這是就需要用到分組。

第一步:寫出滿足section情況的模式字符串

[a-zA-Z]+

第二步:在sectionA和sectionB中可能會出現(xiàn)空格。暫且假設(shè)至多有1個空格

\\s?

將以上兩個情況組合起來,也就是能滿足我們需求的模式字符串。但是如何組織才能讓其分為兩組呢?

[a-zA-Z]+\\s[a-zA-Z]+

上面這種寫法肯定不對的,根據(jù)分組規(guī)則,需要將分組以()進行區(qū)分

regex e("([a-zA-Z]+)\\s?\\(\"([a-zA-Z]+)\"\\)");

      此時,在\\s?后面的\\(\"是為了滿足sectionB外層的引號和括號進行的轉(zhuǎn)義。

      以上完成后,可先用regex_match進行匹配,如果匹配,那么繼續(xù)使用regex_search對字符串進行查找

if (regex_match(str, e))
{
 smatch m;
 auto found = regex_search(str, m, e);
 for (int n = 0; n < m.size(); ++n)
 {
 cout << "m[" << n << "].str()=" << m[n].str() << endl;
 }
}
else
{
 cout << "Not matched" << endl;
}

      對象m數(shù)組的第一個字符串是滿足需求的整個子串,接下來才是滿足分組1、分組2的子串。

關(guān)于“正則表達式模式匹配字符串基礎(chǔ)知識有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

網(wǎng)站欄目:正則表達式模式匹配字符串基礎(chǔ)知識有哪些
URL網(wǎng)址:http://www.rwnh.cn/article44/gdgohe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、App開發(fā)、、用戶體驗做網(wǎng)站、移動網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護公司
安丘市| 贵定县| 抚松县| 青冈县| 阿瓦提县| 怀柔区| 陆川县| 哈巴河县| 牟定县| 临邑县| 桦甸市| 弋阳县| 虎林市| 牙克石市| 曲靖市| 高台县| 得荣县| 成安县| 于都县| 中方县| 襄垣县| 五台县| 南丰县| 玉环县| 镇安县| 祁连县| 太保市| 洮南市| 张家界市| 军事| 温宿县| 西乌珠穆沁旗| 宁陵县| 甘孜县| 革吉县| 体育| 永泰县| 德江县| 福州市| 富源县| 鹰潭市|