2012-05-10 50 views
0

我正在使用iPhone SDK並需要幫助。iOS - 正則表達式 - 搜索字詞全部出現前綴

我有以下搜索項的數組:

f, f, last, m 

和一個字符串(頂端數字是爲了方便只是索引):

0   10   21  30    45 
firstname middlename lastname firstnameagain firstnomatch 

預期結果的範圍(位置,長度): (0,1)(30,1)(21,4)(10,1)

我想有一個正則表達式匹配字符串中的所有搜索項,但只有它們是前綴爲字。當搜索項出現N次時,它將僅匹配前N個前綴(在該示例中,「f」被輸入兩次,因此(45,1)處的可能匹配未被返回)。

我試過編寫許多可能的正則表達式,並且都沒有匹配正確的結果。我得出結論:「\ b」元字符不能使用,因爲字符串可能包含與字母相鄰的非單詞字符(「firstname#」,「?lastName」,...)

回答

0

I我不確定這僅僅是一個正則表達式的工作。

這可以通過或不通過正則表達式,通過用空格分割字符串,然後檢查每個字符串與剩餘前綴列表來完成。

你留着前綴列表這樣:

[f, f, last, m] 

當你對陣姓名,您刪除發現的前綴。在這種情況下,您刪除F:

[f, last, m] 

當你對陣firstnameagain,你再刪除f和不再嘗試匹配F:

[last, m] 

進行搜索,你可以迭代搜索前綴數組並使用NSString rangeOfString函數查看搜索前綴是否在前端。如果你仍然想使用正則表達式,你可以匹配反對:

@"^(f|f|last|m)" 

當你匹配的前綴,從陣列中刪除,然後重拍的正則表達式。

+0

感謝,偉大的想法。在完成此操作之前,需要按照長度對搜索項數組進行排序來完成工作。例如,如果重疊[f,fi],字符串「first f」的條件只會匹配(0,1),除非已排序。 – skalber