Predicate 正则表达式中占位符使用的语法是什么?

What is syntax for placeholder usage in regular expression in Predicate?

我想在正则表达式中指定我的值,我该怎么做?

我在做什么:

request.predicate = Predicate(format: "entityProperty MATCHES [c] '[^0123]%@'", myValue)

观察结果,我可以说 %@ 被解析为正则表达式字符串中的一个字符,没有值代替它

这里有一些explanation关于正则表达式与谓词的用法,但没有关于值占位符的信息

request.predicate = Predicate(format: "entityProperty MATCHES [c] '[^0123]\(myValue)'")

解法:
而不是 %@ 占位符使用字符串替换: "prefixSomeText\(myValue)suffixSomeText"

您的解决方案适用于:

  1. myValue 表示有效的正则表达式模式。
  2. myValue 不能包含单引号 (')。

如果 myValue 可能包含单引号,这将有效:

request.predicate = NSPredicate(format: "entityProperty MATCHES [c] %@", "[^1234]" + myValue)

如果 myValue 不是正则表达式模式并且可能包含一些元字符,您可能需要这样写:

request.predicate = NSPredicate(format: "entityProperty MATCHES [c] %@", "[^1234]"+NSRegularExpression.escapedPattern(for: myValue))

无论如何,你要记住:

Single or double quoting variables (or substitution variable strings) cause %@, %K, or $variable to be interpreted as a literal in the format string and so prevent any substitution.

Parser Basics (Predicate Programming Guide)

(我使用 NSPredicate 因为 Predicate 在 Xcode 8 beta 6 中不可用。)