正則表達式簡介
摘自網上的說法,正則表達式是對字符串(包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為“元字符”))操作的一種
邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串
的一種過濾邏輯。正則表達式是一種文本模式,該模式描述在搜索文本時要匹配的一個或多個字符串。
比較常用的基本正則字符
"^" :^會匹配行或者字符串的起始位置,有時還會匹配整個文檔的起始位置。
"$" :$會匹配行或字符串的結尾。
"\w":匹配字母,數字,下划線。
例如我要匹配"a2345BCD__TTz" 正則:"\w+" 這里的"+"字符為一個量詞指重復的次數。
"\s":匹配空格。
例如字符 "a b c" 正則:"\w\s\w\s\w" 一個字符后跟一個空格,如有字符間有多個空格直接把"\s" 寫成 "\s+" 讓空格重復。
".":匹配除了換行符以外的任何字符。
"[abc]": 字符組,匹配包含括號內元素的字符。
"*": 重復零次或更多(貪婪模式)。
例如"aaaaaaaa" 匹配字符串中所有的a 正則:"a*" 會出到所有的字符"a"。
"+": 重復一次或更多次(懶惰模式)。
例如"aaaaaaaa" 匹配字符串中所有的a; 正則:"a+"會取到字符中所有的a字符,"a+"與"a*"不同在於"+"至少是一次而"*" 可以是0次。
"?": 重復零次或一次。
例如"aaaaaaaa" 匹配字符串中的a 正則 : "a?" 只會匹配一次,也就是結果只是單個字符a。
"{n}": 重復n次。
例如從"aaaaaaaa" 匹配字符串的a 並重復3次 正則:"a{3}" 結果就是取到3個a字符 "aaa"。
"{n,m}": 重復n到m次。
例如正則 "a{3,4}" 將a重復匹配3次或者4次;所以供匹配的字符可以是三個"aaa"也可以是四個"aaaa"正則都可以匹配到。
"{n,}": 重復n次或更多次。
與{n,m}不同之處就在於匹配的次數將沒有上限,但至少要重復n次 如 正則"a{3,}" a至少要重復3次。
"*?": 重復任意次,但盡可能少重復。
如 "acbacb" 正則"a.*?b" 只會取到第一個"acb" 原本可以全部取到但加了限定符后,只會匹配盡可能少的字符 ,而"acbacb"最少字符的結果就是"acb"。
"+?": 重復1次或更多次,但盡可能少重復。
與上面一樣,只是至少要重復1次。
"??": 重復0次或1次,但盡可能少重復。
如 "aaacb" 正則 "a.??b"只會取到最后的三個字符"acb"。
"{n,m}?": 重復n到m次,但盡可能少重復。
如 "aaaaaaaa" 正則 "a{0,m}" 因為最少是0次所以取到結果為空
以上就是正則表達式中最基礎的部分知識,也是比較常用的知識點,對於更加復雜部分的內容本文未涉及。其實看多了,慢慢就
知道是什么意思了,就和你一開始對Linux命令不熟悉一樣,用多了自然而然就記住了。
利用正則實現關聯
Name of created variable:引用名稱,下一個請求要引用的參數名稱,如填寫num,則可用${num}引用它
Regular Expression:正則表達式,填寫編寫的正則
Template:模板,用$$引用起來,如果在正則表達式中有多個正則表達式,則可以是$2$,$3$等等,表示解析提取第幾個值。如:$1$表示解析到的第1個值
Match No.:匹配數字,可以理解為匹配到結果所出現的次數,比如需要設置匹配數字為1,在JMeter中使用1來表示,通常情況下填0即可
Default Value:缺省值,如果參數沒有取到值,那默認給一個值讓它取
測試場景,現在有接口A、接口B兩個接口,接口B需要從接口A中拿到參數“ID”作為自己的入參。此時,我們可以利用Jmeter中的
正則表達式提取器實現這一目標。
配置Jmeter腳本如下,用Dummy Sampler模擬接口A,得到返回結果。
添加正則表達式提取器(Regular Expression Extractor)並做如下配置:
配置接口B,引用從接口A中提取的參數${id}
最后,執行並查看結果,可以看到接口A返回結果中的id已經成功獲取,這里接口B的執行結果截圖省略了。
其中會有個問題,就是我們怎么知道寫的正則表達式是否正確匹配了我們要的數據呢?最好的辦法當然是先驗證一下,省得跑到最后
才發現寫的正則有問題,這里給大家推薦一個在線驗證正則的工具:http://tool.oschina.net/regex。文筆不好,有錯誤的地方望大家多多指正。