婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 正則表達式模式匹配字符串基礎知識

正則表達式模式匹配字符串基礎知識

熱門標簽:西藏智能外呼系統代理商 地圖標注教學點 梅縣地圖標注 甘肅醫療外呼系統排名 ai電話機器人搭建 貴港公司如何申請400電話 呼叫系統外呼只能兩次 400電話辦理電話辦理 外呼系統無呼出路由是什么原因

 介紹

      在實際項目中有個功能的實現需要解析一些特定模式的字符串。而在已有的代碼庫中,在已實現的部分功能中,都是使用檢測特定的字符,使用這種方法的缺點是:

  • 邏輯上很容易出錯
  • 很容易漏掉對一些邊界條件的檢查
  • 代碼復雜難以理解、維護
  • 性能差

      看到代碼庫中有一個cpp,整個cpp兩千多行代碼,有個方法里,光解析字符串的就有400余行!一個個字符對比過去,真是不堪入目。而且上面很多注釋都已經過期,很多代碼的書寫風格也各不相同,基本可以判斷是過了很多人手的。

      在這種情況下,基本沒辦法還沿著這條老路走下去,自然而然就想到了使用正則表達式。而我自己在正則表達式方面沒有實際應用的經驗,尤其是對于書寫匹配規則也是一知半解。第一時間就想到從網上找點資料,先大致了解下。但是度娘的結果依舊還是讓人很失望。(當然,如果是想要查找一些比較專業的知識,度娘的結果每次都會讓人心碎,無不都是千篇一律的拷貝。但是通常度娘生活方面的還是可以)后來就放棄度娘的查詢結果,FQ到了外面去找,也找到了一些比較基礎的視頻(需FQ)。

      這篇文章可以說是一個總結,把在書寫正則表達式的匹配字符串方面的基礎知識介紹一下。主要分為以下兩個個部分:

  1. 匹配字符串的基本規則
  2. 正則匹配、查找與替代

本文介紹的正則表達式規則是ECMAScript。使用的編程語言是C++。其他方面的不做介紹。

匹配字符串的基本規則

1. 匹配固定的字符串

regex e("abc");

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

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

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

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. 匹配[]內的任意字符

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

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

9. 匹配特定字符串,且指定數量

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

10. 匹配特定字符串,指定數量范圍

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

11. 匹配規則中的某一個規則

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

12. 匹配分組

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

13. 匹配子分組

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

14. 匹配某個字符串開頭

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

15. 匹配某個字符串結尾

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

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

正則匹配、查找與替代

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

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

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

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

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

      但是很多情況下,光是返回一個是否匹配的bool量是不夠的,我們需要拿到匹配的子字符串。那么就需要在模式字符串中將匹配字符串分組,參考【匹配字符串的基本規則】第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”。

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

實戰

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

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

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

[a-zA-Z]+

第二步:在sectionA和sectionB中可能會出現空格。暫且假設至多有1個空格

\\s?

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

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

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

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

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

      以上完成后,可先用regex_match進行匹配,如果匹配,那么繼續使用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數組的第一個字符串是滿足需求的整個子串,接下來才是滿足分組1、分組2的子串。

總結

以上所述是小編給大家介紹的正則表達式模式匹配字符串基礎知識,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

您可能感興趣的文章:
  • 正則表達式匹配不包含某些字符串的技巧
  • js 正則表達式學習筆記之匹配字符串
  • 正則匹配密碼只能是數字和字母組合字符串功能【php與js實現】
  • 請教一個正則表達式,匹配所有Html標簽外部的指定字符串
  • 使用正則表達式匹配[***]樣式的字符串
  • 如何使用正則匹配最后一個字符串詳解

標簽:涼山 海口 大興安嶺 常州 泰安 哈密 本溪 湖州

巨人網絡通訊聲明:本文標題《正則表達式模式匹配字符串基礎知識》,本文關鍵詞  正則,表達式,模式,匹配,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《正則表達式模式匹配字符串基礎知識》相關的同類信息!
  • 本頁收集關于正則表達式模式匹配字符串基礎知識的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产suv精品一区二区883| 日韩精品一区二区在线观看| 玉足女爽爽91| 国产欧美精品日韩区二区麻豆天美| 日韩欧美国产综合| 欧美日韩在线观看一区二区| 亚洲电影视频在线| 国内精品在线播放| 91亚洲午夜精品久久久久久| 欧美三级日本三级少妇99| 亚洲男人的天堂在线观看| 91麻豆国产自产在线观看| 久久亚洲精品小早川怜子| 亚洲天堂网中文字| 成人免费看的视频| 国产日韩精品一区二区三区| 日韩美女视频一区| 日本丶国产丶欧美色综合| 久久久www免费人成精品| 免费观看一级欧美片| 国产成人免费av在线| 欧美一区二区三区在线观看 | 国产高清亚洲一区| 国产精品久久久久影院亚瑟| 精品一区二区三区在线播放视频| 一本到不卡免费一区二区| 中国色在线观看另类| 91高清视频在线| 视频一区中文字幕国产| 成人动漫视频在线| 天天色天天爱天天射综合| 在线一区二区三区| 亚洲一区二区三区在线看| 欧美一区二区日韩一区二区| 国产一区二区三区四区五区入口 | 一区二区视频在线| 欧美精品在线观看一区二区| 亚洲一区二区三区激情| 国产午夜精品一区二区三区嫩草| 91国产免费观看| 一区二区三区在线观看动漫| 成人午夜视频网站| 亚洲一级在线观看| 欧美国产视频在线| 欧美大胆一级视频| 欧美日韩高清一区二区三区| 狠狠色丁香久久婷婷综合丁香| 国产精品污污网站在线观看| 日韩一级完整毛片| 99这里只有精品| 国产精品一二二区| 最新日韩av在线| 国产精品538一区二区在线| 久久精品久久综合| 午夜激情一区二区三区| 亚洲精品视频在线| 亚洲国产欧美日韩另类综合 | 国产99久久久国产精品免费看| 加勒比av一区二区| 国产福利91精品一区二区三区| 久久99久久精品| 91美女片黄在线观看91美女| 91麻豆精品国产91久久久久久 | 高清不卡在线观看| 在线亚洲免费视频| 亚洲精品国产a久久久久久| 成人avav影音| a美女胸又www黄视频久久| 亚洲视频电影在线| 国产精品亲子乱子伦xxxx裸| 久久精品免费在线观看| 欧美日韩另类一区| 99麻豆久久久国产精品免费| 成人精品免费视频| 91美女在线观看| 欧美吞精做爰啪啪高潮| 欧美大尺度电影在线| 中文字幕视频一区二区三区久| 一区二区视频免费在线观看| 精品在线播放免费| 国产成人精品亚洲日本在线桃色 | 欧美熟乱第一页| 日韩一区二区三区视频在线观看| 色94色欧美sute亚洲线路二| 精品国产一区二区三区av性色| 国产午夜精品在线观看| 日韩精品1区2区3区| 色噜噜狠狠色综合中国| 日韩欧美区一区二| 亚洲久草在线视频| 成人免费视频app| 国产精品伦理在线| 欧美日韩国产精品自在自线| 亚洲午夜日本在线观看| 成人动漫精品一区二区| 国产伦精品一区二区三区视频青涩| 无吗不卡中文字幕| 国产成a人亚洲精品| 欧美久久一二三四区| 在线观看av一区| 国产精品久久久久7777按摩| 亚洲丰满少妇videoshd| 91精品国产91久久久久久最新毛片| 国产乱子伦视频一区二区三区| 丝袜美腿成人在线| 粉嫩av亚洲一区二区图片| 欧美三电影在线| 欧美激情综合五月色丁香| 国产一区二区日韩精品| 欧美v亚洲v综合ⅴ国产v| 天天影视网天天综合色在线播放| 久久久久亚洲综合| 欧美亚洲精品一区| 中文字幕一区二| 精一区二区三区| 在线成人高清不卡| 石原莉奈在线亚洲三区| 日韩一区二区三免费高清| 中文av一区二区| 日韩三级精品电影久久久| 成人av在线电影| 亚洲激情中文1区| 欧洲一区二区av| 久久国产精品一区二区| 久久久久久久久久久电影| 日韩电影免费在线| 亚洲午夜在线电影| 美女爽到高潮91| 久久亚洲一区二区三区四区| 国产剧情一区在线| 亚洲永久精品国产| 国产精品国产三级国产有无不卡 | 午夜私人影院久久久久| 亚洲成人av中文| 亚洲综合色婷婷| 午夜精品成人在线| 激情小说欧美图片| 亚洲精品成人在线| 欧美激情艳妇裸体舞| 久久久久久久精| 国产精品香蕉一区二区三区| 中文字幕欧美激情| 国产精品麻豆欧美日韩ww| 欧美激情一区二区三区蜜桃视频| 成人av在线网| 亚洲中国最大av网站| 激情综合五月天| 蜜桃一区二区三区在线观看| 亚洲成人av在线电影| 欧美激情一区二区三区不卡| 91精品国产乱码| 国产亚洲欧美色| 亚洲美女屁股眼交3| 轻轻草成人在线| 91视频在线看| 国产盗摄一区二区三区| 国产一区二区三区四区五区美女| 国产在线视频一区二区三区| 国产一区二区三区最好精华液| 色综合咪咪久久| 亚洲第一主播视频| 精品国产免费视频| 中文字幕高清一区| 秋霞午夜鲁丝一区二区老狼| 精品一区二区三区在线观看国产| 91麻豆精品国产91久久久久久久久 | 91年精品国产| 亚洲一区欧美一区| 国产一区二区三区在线观看免费 | 欧美日韩一区二区在线观看视频| 777色狠狠一区二区三区| 国产精品无遮挡| 日本不卡视频一二三区| 国产成人精品免费看| 欧美男生操女生| 色婷婷精品久久二区二区蜜臀av | 日韩精品一区二区三区swag | 欧美一区二区日韩一区二区| 蜜臀久久久99精品久久久久久| 日韩一区二区三区在线视频| 欧美成人aa大片| 亚洲图片另类小说| 99精品欧美一区| 中文无字幕一区二区三区| 国产91丝袜在线播放| 成人免费小视频| 色综合久久天天| 欧美精三区欧美精三区 | 欧美精品亚洲二区| 日欧美一区二区| 2020日本不卡一区二区视频| 国产精品一区二区久激情瑜伽| 国产精品一区二区黑丝| 欧美日韩亚州综合| 五月婷婷激情综合网| 88在线观看91蜜桃国自产| 日av在线不卡| 久久亚洲精华国产精华液 | 偷拍与自拍一区| 亚洲欧美一区二区不卡|