字元?正則?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