2017-07-11 45 views
1

的任務是找到數999 ps.SDR_FLOW_SUBSCRIBER_1DAY_999如何使用+或*在記事本++正則表達式正回顧後(?<= EXP)

我可以使用(?<=1DAY_)[0-9]{3}找到999,但如果我增加更多的條件,Notepad ++將報告錯誤Invalid regular expression

那麼,如何在這種情況下使用+*

+0

這可能是目前您圖像中包含的,但我不能看到它(企業網絡可能會阻止'* .imgur.com'):什麼是你的目標RE與'*'或包括「+」? – Aaron

+0

因爲它可能是你的問題:Notepad ++使用boost正則表達式引擎,它不允許可變寬度lookbehind(大多數正則表達式引擎沒有) - >在lookbehind中使用量詞總是會失敗 – Aaron

+0

你說的任務是找到號碼。但是,如果是這樣的話,你不需要'(?<= 1DAY_)'。所有你看到如果使用_Find All_是一個數字。它與文檔中的任何內容有什麼關係?假設你想用'1DAY_'使用'[1A-Z] + _'來限定它,爲什麼你不希望看到限定符突出顯示?這沒有意義。如果您在替換情況下使用它,只需將該部分包裝到捕獲組中,然後將其寫回。 '([1A-Z] + _)[0-9] {3}'。你可以使用'\ K'運算符將它從匹配項[[1A-Z] + _ \ K [0-9] {3}'中排除,但爲什麼只是爲了使用它而使用它? – sln

回答

0

您可以使用\K匹配復位操作符是一個極好的正面回顧後更換爲不重疊的匹配。

E.g.你可以使用

1\w+_\K[0-9]{3} 

匹配1,然後1+字字符和_,將全部從比賽省略,只有3位將被留在匹配值。

毫無疑問,這將是有意義的排除速記字符類\w下劃線,並使用[^\W_]+代替(匹配任意1+字母數字字符),但主要的一點是這裏使用\K運營商。

enter image description here