在Regex中重疊匹配我似乎無法找到這個問題的答案,我想知道是否存在。簡化示例:考慮一個字符串“nnnn”,其中我想找到“nn”的所有匹配 - 但也是那些彼此重疊的匹配。因此正則表達式將提供以下3個匹配:nn nn? NN ?nn nn我意識到這并不是正則表達式的意思,但是對字符串進行操作并手動解析它似乎是一個非常多的代碼,考慮到實際上匹配必須使用模式而不是文字字符串來完成。
3 回答

SMILET
TA貢獻1796條經驗 獲得超4個贊
使用具有捕獲組的前瞻工作,代價是使正則表達式更慢,更復雜。另一種解決方案是告訴Regex.Match()方法,下一次匹配嘗試應該從哪里開始。試試這個:
Regex regexObj = new Regex("nn");Match matchObj = regexObj.Match(subjectString);while (matchObj.Success) { matchObj = regexObj.Match(subjectString, matchObj.Index + 1); }

小怪獸愛吃肉
TA貢獻1852條經驗 獲得超1個贊
AFAIK,沒有純正的正則表達方式一次做到這一點(即返回你請求的三個捕獲沒有循環(huán))。
現在,您可以找到一次模式,并以offset(找到位置+ 1)開始循環(huán)搜索。應該將正則表達式與簡單代碼結合使用。
[編輯]太棒了,當我基本上說Jan所示的時候,我被投票了...
[編輯2]要明確:Jan的答案更好。不是更精確,但肯定更詳細,值得選擇。我只是不明白為什么我的被投票,因為我仍然沒有看到任何錯誤。沒什么大不了的,只是討厭。
- 3 回答
- 0 關注
- 797 瀏覽
添加回答
舉報
0/150
提交
取消