2012-05-14 77 views
1

嗯,我得到它的工作,但不知何故,它看起來很慢,效率低(或可能不)。有效匹配必須是序列的可選字符

我所得到的是字符序列,爲簡單起見,讓我們只說這是

123456789 

我想要做的就是確保輸入開始以同樣的方式,並且是在同序列,但不需要是完整的序列。

我有什麼是這樣的:

^1(2(3(4(5(6(7(8(9)?)?)?)?)?)?)?)? 

這看起來很可怕,但有一個更好的方式來做到這一點?

編輯新增的^這是在原來的代碼,我忘了,包括在這裏。

回答

1

A?量詞就像一個零件。想想沒有它的發動機運轉良好。如果可能的話,它會嘗試着去嘗試。

Sure x?x?x?x?x?看起來很糟糕。但是,它幾乎沒有意義,除非在某種情況下使用它。

假設你的分組只是表示選項,你可以用這個1(2(3(4(5(6(7(89?)?)?)?)?)?)?)?來排除最後一個內部組。

實施例:

1(2(3(4(5(6(7(8(9)?)?)?)?)?)?)?)?將這個

987654321 1111111111111112121211112121121212312111多次全局匹配。

所以,它的所有相對。

+0

哎呀,我忘了在原始問題中使用的正則表達式的開頭添加'^',以確保它匹配字符串的開頭。 所以我假設有這麼多嵌套'((?)?)在這種情況下可以嗎? – Shaw

+0

這應該是好的。請記住,()是一個捕獲緩衝區,而(?:)用於聚類子表達式。一些引擎可能對可用捕獲緩衝區的數量有限制。我看着Perl,並沒有看到對嵌套分組的限制。我認爲這個級別與堆棧有關。 Perl對遞歸級別有一個編譯限制。認爲它大約是50.這可能是相關的,但我不確定。 – sln