我想使用正則運算式修改 Cookie RequestHeader 以防止向服務器發送太多 cookie,因為服務器只會將請求丟棄在太大的標頭上。但是,我不想洗掉所有 cookie,因為我仍然不使用“授權”cookie。話雖如此,并非所有請求都包含“授權”cookie。
# example cookie A:
foo=bar;authorization=jwt;more=bla
#example cookie B:
foo=bar;more=bla
使用 zalando 的船長過濾器,我可以像這樣修改請求標頭:
zalando.org/skipper-filter: modRequestHeader("Cookie", "^(.*)(authorization=.[^;] ;)(.*)$", "$2")
這適用于 A,但不適用于 B,因為那樣我會得到所有的 cookie 而不是 NONE。
那么如何修改正則運算式以修復它在這兩種情況下都能正常作業呢?
編輯:謝謝@Wiktor
我最終得到了這個可行的解決方案,因為單個 cookie 不需要尾隨分號:
zalando.org/skipper-filter: modRequestHeader("Cookie", "^(?:(.*)(authorization=[^;] )(.*)|. )$", "$2")
uj5u.com熱心網友回復:
擦除沒有匹配項的字串的最簡單方法是添加. 替代項:
^(?:(.*)(authorization=[^;] ;)(.*)|. )$
請參閱正則運算式演示。詳情:
^- 字串的開始(?:- 非捕獲組的開始:(.*)- 第 1 組:除換行符以外的任何零個或多個字符,盡可能多(authorization=[^;] ;)- 第 2 組:authorization=string 和 hen 一個或多個字符,而不是;a;(.*)- 第 3 組:除換行符以外的任何零個或多個字符,盡可能多 -|- 或.- 除換行符以外的任何一個或多個字符,盡可能多
)- 非捕獲組結束$- 字串的結尾。
另一種方法是匹配authorization可選組內的部分,使第一個點模式變得懶惰:
^(.*?)(?:(authorization=[^;] ;)(.*))?$
請參閱此正則運算式演示。由于整個不匹配的字串將落在第 1 組中,替換 with$2仍會產生空輸出。
詳情:
(.*?)- 第 1 組:盡可能少的除換行符以外的零個或多個字符(?:(authorization=[^;] ;)(.*))?- 一個可選的非捕獲組(authorization=[^;] ;)- 第 2 組:authorization=,一個或多個非分號和一個;字符(.*)- 第 3 組:盡可能多的除換行符以外的零個或多個字符
如果您不需要訪問第 3 組值,請從最后一個.*.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/316093.html
上一篇:如何正則運算式將帶有“ ”、“ ”作為組分隔符的文本輸入檔案轉換為CSV或JSON
下一篇:如何根據條件拆分一些減號運算子?
