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

时间:2016-08-27 09:56:21

标签: ios regex nspredicate predicate

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

我在做什么:

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

观察结果,我可以说%@被解析为正则表达式字符串中的字符,没有放置任何值而不是它

以下是关于使用谓词的正则表达式的一些explanation,但没有关于值的占位符的信息

2 个答案:

答案 0 :(得分:1)

您的解决方案适用于:

  1. myValue表示有效的正则表达式模式。
  2. myValue可能不包含单引号(')。
  3. 如果myValue可能包含单引号,则可以使用:

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

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

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

    无论如何,你需要记住:

      

    单引号或双引号变量(或替换变量字符串)   导致%@,%K或$变量被解释为。中的文字   格式化字符串,以防止任何替换。

    Parser Basics (Predicate Programming Guide)

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

答案 1 :(得分:0)

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

<强>解决方案:
而不是%@占位符使用字符串替换: &#34; prefixSomeText \(myvalue的)suffixSomeText&#34;