正規表示式到 Glob 以及反之亦然的轉換
我們有一個要求,希望將正規表示式轉換為雲端前端支援的 Glob,反之亦然。有什麼建議我們如何實現這一點,首先是否可能?特別是從 Regex 到 Glob,據我了解 regex 是一種超集,因此可能無法將所有 Regex 轉換為相應的 Glob?
正確答案
要從 glob 轉換,您需要寫一個解析器,將模式拆分為 抽象語法樹。例如,glob *-{[0-9],draft}.docx
可能會解析為[anything(), "-", oneof([range("0", "9" ), "draft"] ), ".docx"]
。
然後您將遍歷 ast 並輸出每個節點的等效正規表示式。例如,您可能為此使用的規則可能是:
anything() -> .* range(x, y) -> [x-y] oneof(x, y) -> (x|y)
產生正規表示式 .*-([0-9]|draft).docx
。
這並不完美,因為您還必須記住轉義任何特殊字符; .
是正則表達式中的特殊字符,因此您應該對其進行轉義,最終生成 .*-([0-9]|draft)\.docx
。
嚴格來說,正規表示式不能全部轉換為 glob 模式。 globbing 中不存在 kleene star 操作;簡單正規表示式 a*
(即任意數量的 a
字元)無法轉換為 glob 模式。
我不確定 cloudfront 支援哪些類型的 glob(文檔未返回術語“glob”的匹配項),但是 這裡是一些有關普遍支援的 shell glob 模式通配符的文檔。
以下是一些等效序列的總結:
Glob Wildcard | Regular Expression | Meaning |
---|---|---|
? |
. |
Any single character |
* |
.* |
Zero or more characters |
[a-z] |
#[a-z] |
#Any character from the range |
[!a-m] |
[^a-m] |
A character not in the range |
[a,b,c] |
[abc] |
#One of the given characters |
{cat,dog,bat} |
(cat|dog|bat) |
One of the given options |
{*.tar,*.gz} |
#(.*\.tar|.*\.gz) |
One of the given options, considering nested wildcards |
以上是正規表示式到 Glob 以及反之亦然的轉換的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

OpenSSL,作為廣泛應用於安全通信的開源庫,提供了加密算法、密鑰和證書管理等功能。然而,其歷史版本中存在一些已知安全漏洞,其中一些危害極大。本文將重點介紹Debian系統中OpenSSL的常見漏洞及應對措施。 DebianOpenSSL已知漏洞:OpenSSL曾出現過多個嚴重漏洞,例如:心臟出血漏洞(CVE-2014-0160):該漏洞影響OpenSSL1.0.1至1.0.1f以及1.0.2至1.0.2beta版本。攻擊者可利用此漏洞未經授權讀取服務器上的敏感信息,包括加密密鑰等。

後端學習路徑:從前端轉型到後端的探索之旅作為一名從前端開發轉型的後端初學者,你已經有了nodejs的基礎,...

在BeegoORM框架下,如何指定模型關聯的數據庫?許多Beego項目需要同時操作多個數據庫。當使用Beego...

Go語言中用於浮點數運算的庫介紹在Go語言(也稱為Golang)中,進行浮點數的加減乘除運算時,如何確保精度是�...

Go爬蟲Colly中的Queue線程問題探討在使用Go語言的Colly爬蟲庫時,開發者常常會遇到關於線程和請求隊列的問題。 �...

Go語言中使用RedisStream實現消息隊列時類型轉換問題在使用Go語言與Redis...

Go語言中字符串打印的區別:使用Println與string()函數的效果差異在Go...

GoLand中自定義結構體標籤不顯示怎麼辦?在使用GoLand進行Go語言開發時,很多開發者會遇到自定義結構體標籤在�...
