NewReplacer使用技巧

2022-09-19 10:54:17 字數 2196 閱讀 4245

上次寫部落格至今有段時間了,這些日子,認真過,努力過,職場中不管有哪些讓人失意或不快的事,終歸到底,是自己不夠強大。。。

好吧,新的一年,不磨磨唧唧了,一般處理xss漏洞使用正則匹配,再次分享乙個golang strings包newreplacer的方法。

我們先看乙個簡單的例子:

package main

import (

"fmt"

"strings"

)func main()

//輸出 hello 老鳩

//

replacer replaces a list of strings with replacements.

//it is safe for concurrent use by multiple goroutines.

type replacer struct

//newreplacer panics if given an odd number of arguments.

func newreplacer(oldnew ...string) *replacer

(nil), oldnew...)}}//

replace returns a copy of s with all replacements performed.

func (r *replacer) replace(s string) string

newreplacer() 使用提供的多組old=>new的字串,建立並返回乙個*replacer替換程式的指標,replace() 是返回s的所有替換進行完成後的乙個拷貝。

即strings.newreplacer()是 golang中的函式從以前的新字串集列表中返回了新的replacer。

我們再看個例子:

package main

import (

"fmt"

"strings"

)func main()

//原樣輸出 just do it ?, one -> two

替換是按照它們在目標字串中顯示的順序進行,沒有重疊的匹配項。舊的字串比較按引數順序進行。神馬個意思?

既然是替換,我們肯定也會好奇如果是用重複替換項例如("a","a","a","b")go會如何處理?

package main

import (

"fmt"

"strings"

)func main()

//abc

//bbc

//你莫愁啊,不是小李,像是小李

func (b *replacer) build() replacer 

allnewbytes := true

for i := 0; i < len(oldnew); i += 2

if len(oldnew[i+1]) != 1

}//如果都是位元組替換,會進入這個if條件

ifallnewbytes

for i :=range r

//the first occurrence of old->new map takes precedence

//over the others with the same old string.

for i := len(oldnew) - 2; i >= 0; i -= 2

return &r

}r := bytestringreplacer

//the first occurrence of old->new map takes precedence

//over the others with the same old string.

//這裡就是我們需要的地方,通過這個迴圈我們發現替換規則是倒序生成的

//重複的靠前的會覆蓋靠後的

for i := len(oldnew) - 2; i >= 0; i -= 2

) instead of string(o),

//to **oid utf8 encoding of o.

//e. g. byte(150) produces string of length 2.

)) }

r.replacements[o] = byte

(n) }

return &r

}

Linux 使用技巧

1.使用虛擬控制台 登入後按alt f2鍵這時又可以看到 login 提示符,這個就是第二個虛擬控 制台.一般新安裝的linux有四個虛擬控制台,可以用alt f1 alt f4來訪問.虛擬 控制台最有用的時候是當乙個程式出錯鎖住輸入時可以切換到其他虛擬控制台登入 進入後殺掉這個出錯的程序.2.拷貝...

WinCVS使用技巧

更新 update 1,上傳之前先update,為了保證 與伺服器上統一。update 預設 會將伺服器上有的 而本地沒有的 更新到本地,之後再commit才不會出現 遺失。在update時,可能會使有些檔案衝突,需要手動解決。2,獲取伺服器上的版本。update 選中 get the clean ...

svn使用技巧

1.add obj file add flag no ignore 2.delete the svn find name svn type d print xargs rm fr 3.how to rollback to old svn version svn merge rhead 144 url...