首頁 > 後端開發 > Golang > 主體

具有嵌套重複的正規表示式

王林
發布: 2024-02-08 21:20:30
轉載
1214 人瀏覽過

具有嵌套重複的正規表示式

php小編小新在這篇文章中將為大家介紹具有巢狀重複的正規表示式。正規表示式是一種強大的字串匹配工具,可用於尋找、取代和驗證字串。嵌套重複是指在正規表示式中使用一個或多個重複的模式,而這些重複的模式又可以嵌套在其他模式中。這種技巧可以用來匹配具有層級結構的文本,例如HTML標籤、嵌套的括號等。透過了解巢狀重複的正規表示式的語法和用法,我們可以更靈活地處理各種複雜的字串比對需求。

問題內容

我正在嘗試在 go 中創建一個正則表達式,最多匹配 50 個由空格分隔的單詞,其中每個單詞是 1-32 個“a” 我正在使用以下正則表達式

regexp.compile(`^(a{1,32}\s?){1,50}$`)
登入後複製

我收到以下錯誤

error parsing regexp: invalid repeat count: `{1,50}`
登入後複製

我注意到它最多可以重複 31 次,就像這樣

r, err := regexp.Compile(`^(a{1,32}\s?){1,31}$`)
登入後複製

請參考https://go.dev/play/p/rlnrox9-57_m

解決方法

Go 的regexp 引擎有一個限制 其中頂層和任何內部重複的組合不得超過最內部重複部分的1000 個副本。 re2 語法規範中記錄了這一點。

在您的情況下,最多 31 個有效,因為內部 32 * 外部 31 = 992。32 * 32 = 1024 以及 32 * 50 = 1600 超出該限制將不起作用。

解法是將表達式分割為多個部分:^(a{1,32}\s?){1,31}(a{1,32}\s?){0, 19}$ p>

以上是具有嵌套重複的正規表示式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板