'按鍵精靈安卓版提取你想要的內容(正則匹配的簡單介紹)'

按鍵精靈 Android Lua XML 騰訊QQ 按鍵精靈郭立員 2019-08-02
"

正則匹配是一種能夠在複雜內容當中提取你指定內容的方法,我昨天的文章涉及到這個了,今天就來簡單介紹一下。


舉個例子,我們在做接碼案例的時候會收到驗證碼,“【某某app】驗證碼:8456,請注意保管好您驗證碼,請勿洩露!”,對於這段內容,我們希望提取裡面的數字驗證碼,這個時候就用到正則匹配的方法。


"

正則匹配是一種能夠在複雜內容當中提取你指定內容的方法,我昨天的文章涉及到這個了,今天就來簡單介紹一下。


舉個例子,我們在做接碼案例的時候會收到驗證碼,“【某某app】驗證碼:8456,請注意保管好您驗證碼,請勿洩露!”,對於這段內容,我們希望提取裡面的數字驗證碼,這個時候就用到正則匹配的方法。


按鍵精靈安卓版提取你想要的內容(正則匹配的簡單介紹)


Import "shanhai.lua"

Dim 驗證碼短信="【某某app】驗證碼:8456,請注意保管好您驗證碼,請勿洩露!"

Dim 驗證碼=shanhai.RegexFind(驗證碼短信,"%d%d%d%d")

TracePrint 驗證碼(0)


這裡面用到了山海插件的RegexFind命令,它是基於lua語言的正則表達式命令,之後我講解基本都是在這個命令的基礎上完成的。

上面例子中shanhai.RegexFind(驗證碼短信,"%d%d%d%d"),有兩個參數,一個是驗證碼短信,也就是我們說的複雜內容,這個就不用多說,重點是第二個參數,這裡我們單獨提出來看看。

%d%d%d%d,這是4個%d,對於我們要提取的內容:4位數字的驗證碼,依據我們的經驗,%d應該是代表一個數字。如果你要提取一個6位數字,那麼就寫6個%d。

對於不確定數字個數的情況,可以%d+

+代表匹配之前字符一次或者多次。

我們代碼中調試輸出是TracePrint 驗證碼(0),後面有(0),說明正則匹配的返回值是一個數組。對於數組來說,我們要寫上數組下標。

Import "shanhai.lua"

Dim 驗證碼短信="【某某app】驗證碼:8456,請注意保管好您驗證碼,請勿洩露!"

Dim 驗證碼=shanhai.RegexFind(驗證碼短信,"%d+")

TracePrint 驗證碼(0)

由於內容只有一段數字,所以這樣寫%d+也是可以的。但是如果有兩段或者多段數字,那麼就會把所有的數字都提取出來,如下圖


"

正則匹配是一種能夠在複雜內容當中提取你指定內容的方法,我昨天的文章涉及到這個了,今天就來簡單介紹一下。


舉個例子,我們在做接碼案例的時候會收到驗證碼,“【某某app】驗證碼:8456,請注意保管好您驗證碼,請勿洩露!”,對於這段內容,我們希望提取裡面的數字驗證碼,這個時候就用到正則匹配的方法。


按鍵精靈安卓版提取你想要的內容(正則匹配的簡單介紹)


Import "shanhai.lua"

Dim 驗證碼短信="【某某app】驗證碼:8456,請注意保管好您驗證碼,請勿洩露!"

Dim 驗證碼=shanhai.RegexFind(驗證碼短信,"%d%d%d%d")

TracePrint 驗證碼(0)


這裡面用到了山海插件的RegexFind命令,它是基於lua語言的正則表達式命令,之後我講解基本都是在這個命令的基礎上完成的。

上面例子中shanhai.RegexFind(驗證碼短信,"%d%d%d%d"),有兩個參數,一個是驗證碼短信,也就是我們說的複雜內容,這個就不用多說,重點是第二個參數,這裡我們單獨提出來看看。

%d%d%d%d,這是4個%d,對於我們要提取的內容:4位數字的驗證碼,依據我們的經驗,%d應該是代表一個數字。如果你要提取一個6位數字,那麼就寫6個%d。

對於不確定數字個數的情況,可以%d+

+代表匹配之前字符一次或者多次。

我們代碼中調試輸出是TracePrint 驗證碼(0),後面有(0),說明正則匹配的返回值是一個數組。對於數組來說,我們要寫上數組下標。

Import "shanhai.lua"

Dim 驗證碼短信="【某某app】驗證碼:8456,請注意保管好您驗證碼,請勿洩露!"

Dim 驗證碼=shanhai.RegexFind(驗證碼短信,"%d+")

TracePrint 驗證碼(0)

由於內容只有一段數字,所以這樣寫%d+也是可以的。但是如果有兩段或者多段數字,那麼就會把所有的數字都提取出來,如下圖


按鍵精靈安卓版提取你想要的內容(正則匹配的簡單介紹)


這種情況,驗證碼(0)是1,驗證碼(1)是8456,你可以直接調用 驗證碼(1),獲取驗證碼。需要注意的%d+並不是把所有的數字連在一起輸出,而是分段的,連續數字是一組。

不知道大家還記不記得我之前提取中文的案例:


"

正則匹配是一種能夠在複雜內容當中提取你指定內容的方法,我昨天的文章涉及到這個了,今天就來簡單介紹一下。


舉個例子,我們在做接碼案例的時候會收到驗證碼,“【某某app】驗證碼:8456,請注意保管好您驗證碼,請勿洩露!”,對於這段內容,我們希望提取裡面的數字驗證碼,這個時候就用到正則匹配的方法。


按鍵精靈安卓版提取你想要的內容(正則匹配的簡單介紹)


Import "shanhai.lua"

Dim 驗證碼短信="【某某app】驗證碼:8456,請注意保管好您驗證碼,請勿洩露!"

Dim 驗證碼=shanhai.RegexFind(驗證碼短信,"%d%d%d%d")

TracePrint 驗證碼(0)


這裡面用到了山海插件的RegexFind命令,它是基於lua語言的正則表達式命令,之後我講解基本都是在這個命令的基礎上完成的。

上面例子中shanhai.RegexFind(驗證碼短信,"%d%d%d%d"),有兩個參數,一個是驗證碼短信,也就是我們說的複雜內容,這個就不用多說,重點是第二個參數,這裡我們單獨提出來看看。

%d%d%d%d,這是4個%d,對於我們要提取的內容:4位數字的驗證碼,依據我們的經驗,%d應該是代表一個數字。如果你要提取一個6位數字,那麼就寫6個%d。

對於不確定數字個數的情況,可以%d+

+代表匹配之前字符一次或者多次。

我們代碼中調試輸出是TracePrint 驗證碼(0),後面有(0),說明正則匹配的返回值是一個數組。對於數組來說,我們要寫上數組下標。

Import "shanhai.lua"

Dim 驗證碼短信="【某某app】驗證碼:8456,請注意保管好您驗證碼,請勿洩露!"

Dim 驗證碼=shanhai.RegexFind(驗證碼短信,"%d+")

TracePrint 驗證碼(0)

由於內容只有一段數字,所以這樣寫%d+也是可以的。但是如果有兩段或者多段數字,那麼就會把所有的數字都提取出來,如下圖


按鍵精靈安卓版提取你想要的內容(正則匹配的簡單介紹)


這種情況,驗證碼(0)是1,驗證碼(1)是8456,你可以直接調用 驗證碼(1),獲取驗證碼。需要注意的%d+並不是把所有的數字連在一起輸出,而是分段的,連續數字是一組。

不知道大家還記不記得我之前提取中文的案例:


按鍵精靈安卓版提取你想要的內容(正則匹配的簡單介紹)


Dim m="你好囧犇hello 水電費world3aasdas50849638"

Dim 漢字

Import "shanhai.lua"

Dim s=shanhai.RegexFind(m,"[\\128-\\254]+")

TracePrint s(0)

For i = 0 To UBOUND(s)

漢字=漢字&s(i)

Next

TracePrint 漢字

這裡邊的[\\128-\\254]表示ascii碼的128-254,[]也是比較特殊的,代表字符集。比如想寫數字,可以寫成[0-9]


"

正則匹配是一種能夠在複雜內容當中提取你指定內容的方法,我昨天的文章涉及到這個了,今天就來簡單介紹一下。


舉個例子,我們在做接碼案例的時候會收到驗證碼,“【某某app】驗證碼:8456,請注意保管好您驗證碼,請勿洩露!”,對於這段內容,我們希望提取裡面的數字驗證碼,這個時候就用到正則匹配的方法。


按鍵精靈安卓版提取你想要的內容(正則匹配的簡單介紹)


Import "shanhai.lua"

Dim 驗證碼短信="【某某app】驗證碼:8456,請注意保管好您驗證碼,請勿洩露!"

Dim 驗證碼=shanhai.RegexFind(驗證碼短信,"%d%d%d%d")

TracePrint 驗證碼(0)


這裡面用到了山海插件的RegexFind命令,它是基於lua語言的正則表達式命令,之後我講解基本都是在這個命令的基礎上完成的。

上面例子中shanhai.RegexFind(驗證碼短信,"%d%d%d%d"),有兩個參數,一個是驗證碼短信,也就是我們說的複雜內容,這個就不用多說,重點是第二個參數,這裡我們單獨提出來看看。

%d%d%d%d,這是4個%d,對於我們要提取的內容:4位數字的驗證碼,依據我們的經驗,%d應該是代表一個數字。如果你要提取一個6位數字,那麼就寫6個%d。

對於不確定數字個數的情況,可以%d+

+代表匹配之前字符一次或者多次。

我們代碼中調試輸出是TracePrint 驗證碼(0),後面有(0),說明正則匹配的返回值是一個數組。對於數組來說,我們要寫上數組下標。

Import "shanhai.lua"

Dim 驗證碼短信="【某某app】驗證碼:8456,請注意保管好您驗證碼,請勿洩露!"

Dim 驗證碼=shanhai.RegexFind(驗證碼短信,"%d+")

TracePrint 驗證碼(0)

由於內容只有一段數字,所以這樣寫%d+也是可以的。但是如果有兩段或者多段數字,那麼就會把所有的數字都提取出來,如下圖


按鍵精靈安卓版提取你想要的內容(正則匹配的簡單介紹)


這種情況,驗證碼(0)是1,驗證碼(1)是8456,你可以直接調用 驗證碼(1),獲取驗證碼。需要注意的%d+並不是把所有的數字連在一起輸出,而是分段的,連續數字是一組。

不知道大家還記不記得我之前提取中文的案例:


按鍵精靈安卓版提取你想要的內容(正則匹配的簡單介紹)


Dim m="你好囧犇hello 水電費world3aasdas50849638"

Dim 漢字

Import "shanhai.lua"

Dim s=shanhai.RegexFind(m,"[\\128-\\254]+")

TracePrint s(0)

For i = 0 To UBOUND(s)

漢字=漢字&s(i)

Next

TracePrint 漢字

這裡邊的[\\128-\\254]表示ascii碼的128-254,[]也是比較特殊的,代表字符集。比如想寫數字,可以寫成[0-9]


按鍵精靈安卓版提取你想要的內容(正則匹配的簡單介紹)


除了提取驗證碼,其實還有一個內容我們也比較常用,提取界面xml的內容。舉個例子:提取界面當中所有APP的名稱。


"

正則匹配是一種能夠在複雜內容當中提取你指定內容的方法,我昨天的文章涉及到這個了,今天就來簡單介紹一下。


舉個例子,我們在做接碼案例的時候會收到驗證碼,“【某某app】驗證碼:8456,請注意保管好您驗證碼,請勿洩露!”,對於這段內容,我們希望提取裡面的數字驗證碼,這個時候就用到正則匹配的方法。


按鍵精靈安卓版提取你想要的內容(正則匹配的簡單介紹)


Import "shanhai.lua"

Dim 驗證碼短信="【某某app】驗證碼:8456,請注意保管好您驗證碼,請勿洩露!"

Dim 驗證碼=shanhai.RegexFind(驗證碼短信,"%d%d%d%d")

TracePrint 驗證碼(0)


這裡面用到了山海插件的RegexFind命令,它是基於lua語言的正則表達式命令,之後我講解基本都是在這個命令的基礎上完成的。

上面例子中shanhai.RegexFind(驗證碼短信,"%d%d%d%d"),有兩個參數,一個是驗證碼短信,也就是我們說的複雜內容,這個就不用多說,重點是第二個參數,這裡我們單獨提出來看看。

%d%d%d%d,這是4個%d,對於我們要提取的內容:4位數字的驗證碼,依據我們的經驗,%d應該是代表一個數字。如果你要提取一個6位數字,那麼就寫6個%d。

對於不確定數字個數的情況,可以%d+

+代表匹配之前字符一次或者多次。

我們代碼中調試輸出是TracePrint 驗證碼(0),後面有(0),說明正則匹配的返回值是一個數組。對於數組來說,我們要寫上數組下標。

Import "shanhai.lua"

Dim 驗證碼短信="【某某app】驗證碼:8456,請注意保管好您驗證碼,請勿洩露!"

Dim 驗證碼=shanhai.RegexFind(驗證碼短信,"%d+")

TracePrint 驗證碼(0)

由於內容只有一段數字,所以這樣寫%d+也是可以的。但是如果有兩段或者多段數字,那麼就會把所有的數字都提取出來,如下圖


按鍵精靈安卓版提取你想要的內容(正則匹配的簡單介紹)


這種情況,驗證碼(0)是1,驗證碼(1)是8456,你可以直接調用 驗證碼(1),獲取驗證碼。需要注意的%d+並不是把所有的數字連在一起輸出,而是分段的,連續數字是一組。

不知道大家還記不記得我之前提取中文的案例:


按鍵精靈安卓版提取你想要的內容(正則匹配的簡單介紹)


Dim m="你好囧犇hello 水電費world3aasdas50849638"

Dim 漢字

Import "shanhai.lua"

Dim s=shanhai.RegexFind(m,"[\\128-\\254]+")

TracePrint s(0)

For i = 0 To UBOUND(s)

漢字=漢字&s(i)

Next

TracePrint 漢字

這裡邊的[\\128-\\254]表示ascii碼的128-254,[]也是比較特殊的,代表字符集。比如想寫數字,可以寫成[0-9]


按鍵精靈安卓版提取你想要的內容(正則匹配的簡單介紹)


除了提取驗證碼,其實還有一個內容我們也比較常用,提取界面xml的內容。舉個例子:提取界面當中所有APP的名稱。


按鍵精靈安卓版提取你想要的內容(正則匹配的簡單介紹)


Import "shanhai.lua"

Dim m=shanhai.getuixml()

TracePrint m

Dim arr=shanhai.RegexFind(m,"text=""(.-)""")

For Each k In arr

TracePrint k

Next

還是單獨把正則表達式拿出來text=""(.-)""

這裡邊好多引號,這個又涉及到一個知識點,按鍵精靈的轉義字符引號,特別強調一下是按鍵精靈的,因為正則表達式的轉義字符是%

在xml裡面,是這樣的格式 text="系統應用"

引號比較特殊,需要在引號前面加一個引號,也就是如果想要在按鍵裡顯示上面的內容就要變成text=""系統應用""

對於初學者來說是比較亂的,因為還涉及到字符串本身帶有的一對引號,那麼整體看來就好多引號了。

關於引號這部分能明白最好,不明白也沒關係,以後慢慢學吧,接著往下說,表達式text=""(.-)""裡面的括號是用來捕獲你需要提取出來的內容。

我們想想要提取text=""系統應用""裡面的系統應用幾個字,那麼對於表達式text=""(.-)"",括號裡面就是我們想要的內容。

在繼續分析 .-這兩個也是比較特殊的符號,點是代表所有字符,減號是代表匹配一次或者多次,在之前我們說到加號了,看起來作用一樣,但是區別在於,減號是最少匹配。點代表所有字符,也就是我們匹配text="系統應用"引號中的全部內容,如果用.+的話,就會匹配到最後一個引號位置。

比如,text="系統應用",text="QQ",

匹配的結果就是 系統應用",text="QQ

上面的方法還有一個問題,就是會有很多空白內容輸出,這是因為,有些text="",本身它就是空值,所以就會輸出空白。

真的這種情況,換一種寫法。


"

正則匹配是一種能夠在複雜內容當中提取你指定內容的方法,我昨天的文章涉及到這個了,今天就來簡單介紹一下。


舉個例子,我們在做接碼案例的時候會收到驗證碼,“【某某app】驗證碼:8456,請注意保管好您驗證碼,請勿洩露!”,對於這段內容,我們希望提取裡面的數字驗證碼,這個時候就用到正則匹配的方法。


按鍵精靈安卓版提取你想要的內容(正則匹配的簡單介紹)


Import "shanhai.lua"

Dim 驗證碼短信="【某某app】驗證碼:8456,請注意保管好您驗證碼,請勿洩露!"

Dim 驗證碼=shanhai.RegexFind(驗證碼短信,"%d%d%d%d")

TracePrint 驗證碼(0)


這裡面用到了山海插件的RegexFind命令,它是基於lua語言的正則表達式命令,之後我講解基本都是在這個命令的基礎上完成的。

上面例子中shanhai.RegexFind(驗證碼短信,"%d%d%d%d"),有兩個參數,一個是驗證碼短信,也就是我們說的複雜內容,這個就不用多說,重點是第二個參數,這裡我們單獨提出來看看。

%d%d%d%d,這是4個%d,對於我們要提取的內容:4位數字的驗證碼,依據我們的經驗,%d應該是代表一個數字。如果你要提取一個6位數字,那麼就寫6個%d。

對於不確定數字個數的情況,可以%d+

+代表匹配之前字符一次或者多次。

我們代碼中調試輸出是TracePrint 驗證碼(0),後面有(0),說明正則匹配的返回值是一個數組。對於數組來說,我們要寫上數組下標。

Import "shanhai.lua"

Dim 驗證碼短信="【某某app】驗證碼:8456,請注意保管好您驗證碼,請勿洩露!"

Dim 驗證碼=shanhai.RegexFind(驗證碼短信,"%d+")

TracePrint 驗證碼(0)

由於內容只有一段數字,所以這樣寫%d+也是可以的。但是如果有兩段或者多段數字,那麼就會把所有的數字都提取出來,如下圖


按鍵精靈安卓版提取你想要的內容(正則匹配的簡單介紹)


這種情況,驗證碼(0)是1,驗證碼(1)是8456,你可以直接調用 驗證碼(1),獲取驗證碼。需要注意的%d+並不是把所有的數字連在一起輸出,而是分段的,連續數字是一組。

不知道大家還記不記得我之前提取中文的案例:


按鍵精靈安卓版提取你想要的內容(正則匹配的簡單介紹)


Dim m="你好囧犇hello 水電費world3aasdas50849638"

Dim 漢字

Import "shanhai.lua"

Dim s=shanhai.RegexFind(m,"[\\128-\\254]+")

TracePrint s(0)

For i = 0 To UBOUND(s)

漢字=漢字&s(i)

Next

TracePrint 漢字

這裡邊的[\\128-\\254]表示ascii碼的128-254,[]也是比較特殊的,代表字符集。比如想寫數字,可以寫成[0-9]


按鍵精靈安卓版提取你想要的內容(正則匹配的簡單介紹)


除了提取驗證碼,其實還有一個內容我們也比較常用,提取界面xml的內容。舉個例子:提取界面當中所有APP的名稱。


按鍵精靈安卓版提取你想要的內容(正則匹配的簡單介紹)


Import "shanhai.lua"

Dim m=shanhai.getuixml()

TracePrint m

Dim arr=shanhai.RegexFind(m,"text=""(.-)""")

For Each k In arr

TracePrint k

Next

還是單獨把正則表達式拿出來text=""(.-)""

這裡邊好多引號,這個又涉及到一個知識點,按鍵精靈的轉義字符引號,特別強調一下是按鍵精靈的,因為正則表達式的轉義字符是%

在xml裡面,是這樣的格式 text="系統應用"

引號比較特殊,需要在引號前面加一個引號,也就是如果想要在按鍵裡顯示上面的內容就要變成text=""系統應用""

對於初學者來說是比較亂的,因為還涉及到字符串本身帶有的一對引號,那麼整體看來就好多引號了。

關於引號這部分能明白最好,不明白也沒關係,以後慢慢學吧,接著往下說,表達式text=""(.-)""裡面的括號是用來捕獲你需要提取出來的內容。

我們想想要提取text=""系統應用""裡面的系統應用幾個字,那麼對於表達式text=""(.-)"",括號裡面就是我們想要的內容。

在繼續分析 .-這兩個也是比較特殊的符號,點是代表所有字符,減號是代表匹配一次或者多次,在之前我們說到加號了,看起來作用一樣,但是區別在於,減號是最少匹配。點代表所有字符,也就是我們匹配text="系統應用"引號中的全部內容,如果用.+的話,就會匹配到最後一個引號位置。

比如,text="系統應用",text="QQ",

匹配的結果就是 系統應用",text="QQ

上面的方法還有一個問題,就是會有很多空白內容輸出,這是因為,有些text="",本身它就是空值,所以就會輸出空白。

真的這種情況,換一種寫法。


按鍵精靈安卓版提取你想要的內容(正則匹配的簡單介紹)


Import "shanhai.lua"

Dim m=shanhai.getuixml()

TracePrint m

Dim arr=shanhai.RegexFind(m,"text=""([^""]+)")

For Each k In arr

TracePrint k

Next

這種寫法中涉及到 ^ 這個符號是“非”的意思,也就說說這段正則表達式,是匹配非引號的多個字符,我們看到text=""這種情況,引號裡面沒有內容,第一個引號後面跟的是第二個引號,所以不符合我們我說的非引號匹配方式被排除了。

"

相關推薦

推薦中...