與正規表示式重疊字串匹配
當使用具有全域標誌(/g)的正規表示式來匹配字串時,您可以遇到重疊匹配未如預期返回的情況。例如,在字串“12345”中,使用 /d{3}/g 匹配只會產生匹配“123”,而不是 [“123”, “234”, “345”]。
原因因為這種行為在於正規表示式與全域標誌相符的本質。正規表示式引擎讀取並使用匹配的子字串,將其索引前進到緊接在匹配之後的位置。本例中,在配對「123」後,索引移動到位置4,只留下「45」進行後續匹配。
重疊匹配技巧
實現重疊匹配,可以用多種方法使用:
零寬度斷言:
範例(使用matchAll 的JavaScript) :
const re = /(?=(\d{3}))/g; console.log(Array.from('12345'.matchAll(re), x => x[1]));
此程式碼使用正向前瞻測試字串中與三瞻個連續數字匹配的所有位置。結果是匹配子字串的數組,包括 ["123", "234", "345"]。
其他注意事項:
以上是如何獲得正規表示式和全域標誌的重疊匹配?的詳細內容。更多資訊請關注PHP中文網其他相關文章!