1. 程式人生 > >字元?正則?bugku(正則表示式學習)

字元?正則?bugku(正則表示式學習)

題目

通過讀程式碼可以看出只要我們構造出符合正則表示式的字串通過GET傳參傳過去就可以看到 key 即 flag

通過這道題看了很多正則表示式的語法規則……

------------------------------------------------------------------------------------------------------------------------------------------分割線哇

首先分析這道題:

定界符:/和/(一般來說是這兩個,其實除了\和字母數字其它的只要是成對出現都可以看做定界符,比如##、!!之類的);

. (一個點):表示可以匹配任何字元;

*   :前面的字元重複零次或多次;

{n,m} :前面的字元重複4~7次;

\ (反斜線):後面的字元被轉義;

[a-z] :在a到z中匹配 ;

[[:punct:]] :匹配任何標點符號;

/i  :表示這個正則表示式對大小寫不敏感;

至此,我們可以對這道題的正則表示式進行構造。

例如:keyakeyaaaakey:/a/aakeyb!

有很多隻要符合都可以

----------------------------------------------------------------------------------------------------------------------------------我是分割線哇

正則表示式語法補充:

一、

 "\b" :不會消耗任何字元只匹配一個位置,常用於匹配單詞邊界 如 我想從字串中"This is Regex"匹配單獨的單詞 "is" 正則就要寫成 "\bis\b"  

    \b 不會匹配is 兩邊的字元,但它會識別is 兩邊是否為單詞的邊界 

 "\d": 匹配數字

 "\w":匹配字母,數字,下劃線.

 "\s":匹配空格 

  ".":匹配除了換行符以外的任何字元

  "[abc]": 字元組  匹配包含括號內元素的字元 

另:

   "\W"   匹配任意不是字母,數字,下劃線 的字元

   "\S"   匹配任意不是空白符的字元

 "\D"  匹配任意非數字的字元

   "\B"  匹配不是單詞開頭或結束的位置

   "[^abc]"  匹配除了abc以外的任意字元

二、(來自https://www.cnblogs.com/afarmer/archive/2011/08/29/2158860.html

* 匹配前面的子表示式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等價於{0,}。
+ 匹配前面的子表示式一次或多次。例如,’zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等價於 {1,}。
? 匹配前面的子表示式零次或一次。例如,”do(es)?” 可以匹配 “do” 或 “does” 中的”do” 。? 等價於 {0,1}。
{n} n 是一個非負整數。匹配確定的 n 次。例如,’o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的兩個 o。
{n,} n 是一個非負整數。至少匹配n 次。例如,’o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。’o{1,}’ 等價於 ‘o+’。’o{0,}’ 則等價於 ‘o*’。
{n,m} m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,”o{1,3}” 將匹配 “fooooood” 中的前三個 o。’o{0,1}’ 等價於 ‘o?’。請注意在逗號和兩個數之間不能有空格。

 

這些都是很基礎的元素,還有很多搭配使用,詳見  ---->  Orz