我正在使用iPhone SDK并需要帮助。
我有以下搜索字词数组:
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 :(得分:0)
我不确定这只是一个正则表达式的工作。
这可以使用或不使用正则表达式,通过用空格爆炸字符串然后根据剩余前缀列表检查每个字符串来完成。
你保留一份前缀列表:
[f, f, last, m]
当您与名字匹配时,您会删除找到的前缀。在这种情况下,您删除f:
[f, last, m]
当您与 firstnameagain 匹配时,您再次删除f,并且不再尝试匹配f:
[last, m]
要执行搜索,您可以遍历搜索前缀数组并使用NSString rangeOfString函数来查看搜索前缀是否在前面。如果您仍想使用正则表达式,则可以匹配:
@"^(f|f|last|m)"
在匹配前缀时,将它们从数组中删除,然后重新制作正则表达式。