0

我正在使用 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”、...)

4

1 回答 1

0

我不确定这仅仅是一个正则表达式的工作。

这可以通过使用或不使用正则表达式来完成,方法是用空格分解字符串,然后根据剩余前缀列表检查每个字符串。

您保留一个前缀列表,如下所示:

[f, f, last, m]

当您匹配firstname时,您会删除找到的前缀。在这种情况下,您删除 f:

[f, last, m]

当您再次匹配firstnameagain时,您再次删除 f,并且不再尝试匹配 f:

[last, m]

To perform the search, you could iterate through the array of search prefixes and use the NSString rangeOfString function to see if the search prefix is at the front. If you still want to use a regex, you can match against:

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

As you match prefixes, remove them from the array, then remake the regex.

于 2012-05-10T14:09:57.450 回答