第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Regex中重疊匹配

在Regex中重疊匹配

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

3 回答

?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

一個可能的解決方案可能是使用積極的外觀

(?<=n)n

它會給你最終的位置:

  1. * N ***?** NN  

  2. N * N ***?** N  

  3. NN * N ***?**


正如Timothy Khouri所提到的 ,積極的前瞻更為直觀

我更喜歡他的命題(?=nn)n更簡單的形式:

(n)(?=(n))

這將引用您想要的字符串的第一個位置,并將捕獲組(2)中的第二個n。

那是因為:

  • 可以在前瞻中使用任何有效的正則表達式。

  • 如果它包含捕獲括號,則將保存反向引用。

因此,組(1)和組(2)將捕獲'n'表示的任何內容(即使它是復雜的正則表達式)。


查看完整回答
反對 回復 2019-08-28
?
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); }


查看完整回答
反對 回復 2019-08-28
?
小怪獸愛吃肉

TA貢獻1852條經驗 獲得超1個贊

AFAIK,沒有純正的正則表達方式一次做到這一點(即返回你請求的三個捕獲沒有循環(huán))。

現在,您可以找到一次模式,并以offset(找到位置+ 1)開始循環(huán)搜索。應該將正則表達式與簡單代碼結合使用。

[編輯]太棒了,當我基本上說Jan所示的時候,我被投票了... 
[編輯2]要明確:Jan的答案更好。不是更精確,但肯定更詳細,值得選擇。我只是不明白為什么我的被投票,因為我仍然沒有看到任何錯誤。沒什么大不了的,只是討厭。


查看完整回答
反對 回復 2019-08-28
  • 3 回答
  • 0 關注
  • 797 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號