Day12 字串和正規表示式

2021-10-18 06:28:57 字數 3490 閱讀 4829

日期:2023年1月29日

今天是學習python的第十二天,正規表示式在我參加ctf的時候就接觸過了,通過正則匹配提交獲取flag,今天稍微會輕鬆一些。

學習用的教材是github上駱昊編寫的《python - 100天從新手到大師》

《正規表示式30分鐘入門教程》:

正規表示式是乙個強大的文字匹配的工具,可以精確地描述需求。

下面是一些基本符號的總結

符號

解釋示例說明.

匹配任意字元

b.t可以匹配bat / but / b#t / b1t等

\w匹配字母/數字/下劃線

b\wt

可以匹配bat / b1t / b_t等

但不能匹配b#t

\s匹配空白字元(包括\r、\n、\t等)

love\syou

可以匹配love you

\d匹配數字

\d\d

可以匹配01 / 23 / 99等

\b匹配單詞的邊界

\bthe\b

^匹配字串的開始

^the

可以匹配the開頭的字串

$匹配字串的結束

.exe$

可以匹配.exe結尾的字串

\w匹配非字母/數字/下劃線

b\wt

可以匹配b#t / b@t等

但不能匹配but / b1t / b_t等

\s匹配非空白字元

love\syou

可以匹配love#you等

但不能匹配love you

\d匹配非數字

\d\d

可以匹配9a / 3# / 0f等

\b匹配非單詞邊界

\bio\b

匹配來自字符集的任意單一字元

[aeiou]

可以匹配任一母音字母字元

[^]匹配不在字符集中的任意單一字元

[^aeiou]

可以匹配任一非母音字母字元

*匹配0次或多次

\w*+

匹配1次或多次

\w+?

匹配0次或1次

\w?匹配n次

\w匹配至少m次

\w匹配至少m次至多n次\w|

分支foo|bar

可以匹配foo或者bar

(?#)

注釋(exp)

匹配exp並捕獲到自動命名的組中

(?exp)

匹配exp並捕獲到名為name的組中

(?:exp)

匹配exp但是不捕獲匹配的文字

(?=exp)

匹配exp前面的位置

\b\w+(?=ing)

可以匹配i』m dancing中的danc

(?<=exp)

匹配exp後面的位置

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

可以匹配i love dancing and reading中的第乙個ing

(?!exp)

匹配後面不是exp的位置

(?匹配前面不是exp的位置

*?重複任意次,但盡可能少重複

a.*b

a.*?b

將正規表示式應用於aabab,前者會匹配整個字串aabab,後者會匹配aab和ab兩個字串

+?重複1次或多次,但盡可能少重複

??重複0次或1次,但盡可能少重複

?重複m到n次,但盡可能少重複

?重複m次以上,但盡可能少重複

說明:

如果需要匹配的字元是正規表示式中的特殊字元,那麼可以使用\\進行轉義處理,例如想匹配小數點可以寫成\\.就可以了,因為直接寫.會匹配任意字元;同理,想匹配圓括號必須寫成\\(\\),否則圓括號被視為正規表示式中的分組。

python提供了re模組來支援正規表示式相關操作,下面是re模組中的核心函式

函式

說明compile(pattern, flags=0)

編譯正規表示式返回正規表示式物件

match(pattern, string, flags=0)

用正規表示式匹配字串 成功返回匹配物件 否則返回none

search(pattern, string, flags=0)

搜尋字串中第一次出現正規表示式的模式 成功返回匹配物件 否則返回none

split(pattern, string, maxsplit=0, flags=0)

用正規表示式指定的模式分隔符拆分字串 返回列表

sub(pattern, repl, string, count=0, flags=0)

用指定的字串替換原字串中與正規表示式匹配的模式 可以用count指定替換的次數

fullmatch(pattern, string, flags=0)

match函式的完全匹配(從字串開頭到結尾)版本

findall(pattern, string, flags=0)

查詢字串所有與正規表示式匹配的模式 返回字串的列表

finditer(pattern, string, flags=0)

查詢字串所有與正規表示式匹配的模式 返回乙個迭代器

purge()

清除隱式編譯的正規表示式的快取

re.i / re.ignorecase

忽略大小寫匹配標記

re.m / re.multiline

多行匹配標記

說明:上面提到的re模組中的這些函式,實際開發中也可以用正規表示式物件的方法替代對這些函式的使用,如果乙個正規表示式需要重複的使用,那麼先通過compile函式編譯正規表示式並建立出正規表示式物件無疑是更為明智的選擇。

三、自動匹配隨機匹配正規表示式

做ctf的web題常有正則匹配題,這裡附上乙個正則匹配的程式

from xeger import xeger

defmain()

:print

('*'*10

,'正則匹配'

,'*'*10

,'\n'

) _x = xeger(

) zhengze=

input

('輸入正規表示式:'

) n=

int(

input

('需要生成的個數:'))

for i in

range

(n):

teststr = _x.xeger(zhengze)

print

(teststr)

input

('\n按任意鍵退出'

)if __name__==

'__main__'

: main(

)

二 字串和正規表示式 正規表示式函式

正規表示式函式 1.preg match 函式,實現字串的比對 int preg match string pattern,string subject,array matches 返回值 整數 陣列 本函式以 pattern 的規則來解析比對字串 subject。比對結果返回的值放在陣列引數 ma...

九 字串和正規表示式

在c 中string關鍵字實際對映為system string類,它實際上是乙個不可變的資料型別.system text stringbuilder類為可變資料型別,提高了追加字串的效率.可設定容量及最大容量,超出最大容量丟擲異常.iformattable介面,如果繼承此藉口,那麼在格式化函式中,會...

二 字串和正規表示式 正規表示式的模式修正符

正規表示式的模式修正符 模式修正符是為正規表示式增強和補充的乙個功能,使用在正則之外.格式 正則 模式修正符 常用模式修正符有 i 正則內容在匹配時候不區分大小寫 預設是區分的 m 在匹配首內容或者尾內容時候採用多行識別匹配 s 將轉義回車 n取消是為單行匹配如.x 忽略正則中的空白 a 強制從頭開...