1. 程式人生 > 其它 >Jmeter 正則表示式提取括號中的文字內容

Jmeter 正則表示式提取括號中的文字內容

  介紹

jmeter裡介面請求結束後,如果後續介面請求想要獲取本次返回結果的內容,就需要正則表示式提取器來獲取引數,當然也可以用json path extractor來提取(這個簡單一些)。不過Jmeter裡很多地方的約束條件和斷言都是需要正則表示式來匹配的,所以大家還是要學習一下正則表示式的語法,以便更好更效率的完成測試內容。下面簡單介紹一下常用的語法,這次先寫一半,下次再補另一半。正則表示式的內容還是很多的,我也只是學了其中的一些皮毛,通用的東西,後期再慢慢深入吧,而且要學以致用,學的東西一定要親自實際體驗一下才會記得牢,好了,言歸正轉。

  我參考的網站是deerchao.net,作者真是偉大,文章也很幽默,也是老資格的人了,哈哈。也可以直接忽略我的文章,直接看大牛的文章學習。那這裡我就直接從字元匹配的語法來進行例項講解了,可以下載網站裡的正則表示式測試工具,直接在工具裡體驗。

  

下面列舉元字元語法:

1.\bhi\b : 匹配只有hi的字元,\b代表的位置,第一個\b代表單詞開始的位置,第二個\b代表單詞結束的位置
2.\bhi\b.*\bthis\b : 匹配hi的字元後,中間有任意個字元後,後面是this的字元
3. . : 表示任意字元的元字元
4. *:表示任意數量的元字元
5. \d : 表示任意一個數字
6. \d{2}: 表示任意一個數字出現兩次,相當於\d\d
7. \s : 匹配任意的空白符,包括空格,換行符,製表符(tab),中文全形空格
8. \w : 匹配字母,數字,下劃線或漢字
9. \d+ : 匹配一個或更多連續的數字
10. \b\w{2}\b : 匹配剛好有兩個字元的單詞
11. \b : 匹配單詞的開始和結束
12. ^ : 匹配字串的開始
13. $ : 匹配字串的結束, 例: ^\d{2,5}$ 表示輸入的數字必須是2位(包含)到5位(包含)之間
14. \ : 轉義字元,如果要查詢元字元就需要用轉義字元來完成,比如: deerchao\.net 實際上是deerchao.net
15. 重複次數說明: *是重複0次或多次,+是重複1次或多次,?是重複零次或一次,{n} 是重複n次,{n,}是重複n次到多次,{n,m}是重複n次到m次
16. [] : 括號裡的字元會被匹配,比如[ab]匹配a或b字元,[,?]匹配逗號或問號
17. [a-z0-9A-Z] : 相當於匹配\w
18. | : 匹配或規則。比如: \(0\d{2}\)[- ]?\d{8}|\(0\d{3}\)[- ]\d{7}|0\d{2}[- ]?\d{8}|0\d{3}[- ]?\d{7} 這個就是匹配電話號碼的,如:012-56236562, 0536-1234567,(0536)-1234567,01212345678
19. ():匹配分組,255.134.123.123 或 193.168.1.1 匹配表示式為:
(([01]?\d\d?|25[0-5]|2[0-4]\d)\.){3}([01]?\d\d?|25[0-5]|2[0-4]\d)
20. \W : 匹配任意不是字母,數字,下劃線,漢字的字元
21. \S : 匹配任意不是空白符的字元
22. \D : 匹配任意非數字的字元
23. \B : 匹配不是單詞開頭或結尾的位置
24. [^x] : 匹配除了x以外的任意字元
25. [^aeiou] : 匹配除了aeiou以外的任意字元
26. (?<word>\w+) 或(?'word'\w+) 後向引用,用於重複搜尋前面某個分組已經匹配的文字,引用時就可以寫成\k<word>。實際上分組0對應整個正則表示式;組號分配過程是從左到右分配兩遍的,第一遍先掃描未命名的分組,第二遍掃描已命名的分組,所以命名分組的組號永遠大於未命名分組的組號的; 可以用(?:exp)來剝奪組號分配的參與權
27. 分組命名的幾種語法: (exp) 匹配exp表示式並將文字匹配的內容自動分配到分組裡;
(?<name> exp)匹配exp表示式裡的文字內容到name組名下,也可以寫成(?'name'exp); (?:exp)匹配exp表示式裡內容,但是不捕獲匹配的文字也不給匹配的文字分配組號;(?=exp)匹配exp前面的位置; (?<=exp)匹配exp後面的位置 ; (?!exp)匹配後面不是exp的位置 ; (?<!exp) 匹配前面不是exp的位置; (?#comment)添加註釋,對正則表示式沒有任何影響;
28. (?=exp)與(?<=exp)為零寬斷言,其中(?=exp)為零寬度正預測先行斷言,(?<=exp)為零寬度正回顧後發斷言。(?=exp)表示自exp斷言表示式出現的位置開始匹配斷言之前的內容,如\b\w+(?=er\b) 原始檔為tester,則匹配結果為:test。(?<=exp)表示自exp斷言表示式內容結束後的位置開始匹配後面的內容,如(?<=test)\w+\b 原始檔為test, 則匹配結果為:er。

  實際栗子

  1、提取的文字如下:

{
  "code": "0",
  "args": null,
  "message": null,
  "value": "順豐(SF)"
}

  需求:提取括號中的文字,但是不要提取兩邊的括號

  知識點:?=、?<=、?!、?<! 的使用區別:https://www.runoob.com/regexp/regexp-syntax.html

  方法1:

(?<=\()(.+?)(?=\))

  結果:jmeter提取時報錯,發現不支援<

  

  方法2:

\b\w{2}\b 

  

  結果:匹配了兩個,雖然可以用下標來取,但是著實不是最佳的方法。

  方法3:

\b\w+(?=\))\b

  利用(?=exp)為零寬度正預測先行斷言+定位符\b+普通字元\w來檢索

  結果:

  

  總結

  正則很強大,也很靈活,方法千百個,需要靈活使用,並且日常中多練練。有興趣加入我們一起學習。

  

  


作者:全棧測試開發日記
出處:https://www.cnblogs.com/liudinglong/
csdn:https://blog.csdn.net/liudinglong1989/
微信公眾號:全棧測試開發日記
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。