2013-05-02 74 views
0

好吧,首先,我與正則表達式有緊張的關係。我通常可以設法抓取或驗證我需要的數據。但現在真的感覺我已經撞上了正則表達式牆。正則表達式不允許部分匹配

我有concatinated字符串的用戶數據,我需要驗證。
他們看起來像這樣:john|45|some|data|00111{more|data
{more|data - 部分應該能夠發生0次或更多次,但如果我只是使用(regex)*。如果一部分失敗,字符串仍然部分匹配。我希望它在這種情況下失敗。

爲了簡化我的情況:我想foofoobarfoobarbar驗證。但foobarcarfoobat未通過驗證。

foo(?:bar)*將匹配所有(最後2只是部分)

...如果可能的話,我想保持「不捕獲」部分(?:)。

從我所知道的,解決方案可能是在環視中,DontAllowPartialMatches參數中的代碼,或分割字符串,並逐個驗證零件...

任何幫助是極大的讚賞。

回答

0

明確匹配字符串的使用$結束(也可能是線,取決於你的話):

foo(?:bar)*$ 

這將匹配FOO,foobar的,foobarbar等,但不foobarcar或foobat,如你自找的。

(它也將匹配barfoobar,雖然如此,如果這是一個問題,你可能會想使用^到開始明確過於匹配。^foo(?:bar)*$

+0

哦,這麼簡單呵呵...我是肯定然後高估問題。非常感謝! – 2013-05-02 09:34:04

+0

正則表達式對人有傾向性。 – Cairnarvon 2013-05-02 09:35:33