2010-02-02 18 views
5

我需要一個正則表達式來匹配連續增加或減少的連續3個數字序列。什麼是3個連續數字增加或減少的正則表達式

例如:

這些字符串應該匹配(xxx123xxx,789xxxxxx,xxxxxx987,xxxxxx432)

這些字符串不應該匹配(xxxxxx454,333xxxxxx,xxx429xxx)

+1

爲什麼要求正則表達式? (我認爲這不能用大多數正則表達式來實現,Perl的條件語句可能會這樣做)。最好匹配三個連續的數字,然後篩選它們之間的關係。 – Richard 2010-02-02 15:25:41

+3

「增加或減少」使得正則表達式不適合於此任務 – 2010-02-02 15:26:04

+0

這是一個需要在每個點處「狀態」的問題。考慮使用狀態機(解析器)來解決這個問題。 – stusmith 2010-02-02 15:42:56

回答

8

有沒有其他方式比列出他們:

(012|123|234|345|456|567|678|789|987|876|765|654|543|432|321|210) 
+1

這在技術上是正確的答案,但我同意正則表達式不一定是完成任務的最佳方式。應使用正則表達式查找3位數字模式,然後應使用進一步測試來確定3位數字模式是否連續增加/減少。 – user106776 2010-02-03 15:16:22

+0

@ matt.kovacs:這是一個很好的結論。 – Gumbo 2010-02-03 15:21:16

2

這將是一個非常複雜的正則表達式。在一個需要做類似工作的項目中,我最終匹配了數字組,然後將數字的實際驗證傳遞給了一個委託(我在C++代碼中這樣做了;在Java中的另一個項目上做了類似的工作一樣的方法)。

如果可能的話,這是我推薦在這裏做的。一個能夠獨立完成這個任務的正則表達式將非常難以閱讀或維護。

3

這可以簡單地完成,但僅僅具有限定的連續數字

(有效集:?012 | 210 | 123 | 321 | 234 | 432 | 345 | 543 | 456 | 654 | 567 | 765 | 678 | 876 | 789 | 987)

相關問題