Python 3.11.0b4 中的正規表示式引擎的更新一則

作者:   發佈於: ,更新於:   #python

在 2022/07/11 釋出的 Python 3.11.0b4 的更新概要中看到以下這項關於正規表示 式的更新:

- bpo-433030– Atomic grouping ((?>…)) and possessive quantifiers (*+,
  ++, ?+, {m,n}+) are now supported in regular expressions.

也就是在 python 3.11 的正規表示式裡加入了 (?>...) 這樣的語法。

(?>...) 這個語法是讓人要在手動避免回溯時使用的,一般而言是可以用來避免不必要的回溯而將所需的執行時間減少。這語法在 perl 與 pcre 中都已經出現一段時間了。只是 python3 (cpython) 內並不是直接用 pcre,而是個獨自開發的,名爲 SRE (Secret Lab's Regular Expression Engine) 的正規表示式引擎。看來一定程度上 SRE 與 perlre 或 PCRE 的語法是互通的。

稍微追查一下 bpo-433030 的內容後發現這事項是在 2001 年由 Jeffrey Friedl (O'Reilly "Mastering Regualr Expression" 一書的作者) 測出來,途中經過幾人貢獻了修正後,總算是在 2022 年正式出現在 python 裡面。

原來是個總共花了 21 年的才處理完畢的蟲。