使用NSPredicate使用通配符符号搜索子字符串

时间:2018-02-06 07:35:36

标签: ios swift wildcard nspredicate

我尝试查找包含带通配符的子字符串的字符串,例如字符串应包含'*'和'p'。同时字符串可以开始,结束并包含符号之间任意数量的字符。这是我的例子

let dataSource = [
    "Domain CheckService",
    "IMEI check",
    "Compliant about service provider",
    "Compliant about TRA",
    "Enquires",
    "Suggestion",
    "SMS* Spam",
    "Poor Coverage",
    "Pure *Signal",
    "Help Salim"
]

let searchString = "***p*"
let predicate = NSPredicate(format: "SELF LIKE %@", searchString)
let searchDataSource = dataSource.filter { predicate.evaluate(with: $0) }

我使用这样的掩码来查找满足条件的字符串:

any symbols + '*' + any symbols + 'p' + any symbols

但是此变体不起作用*是LAKE中的保留符号,因此结果我得到了错误的搜索集。那么这是一个问题吗?如何搜索带有'*'符号的子字符串。

1 个答案:

答案 0 :(得分:1)

导致正确结果的变体:使用通配符与正则表达式中的转义符号相同,在通配符之前添加双反斜杠 正确的面具看起来像:

 let searchString = "*\\**p*"