【问题标题】:What is syntax for placeholder usage in regular expression in Predicate?Predicate 中正则表达式中占位符使用的语法是什么?
【发布时间】:2016-08-27 09:56:21
【问题描述】:

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

我在做什么:

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

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

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

【问题讨论】:

    标签: ios regex nspredicate predicate


    【解决方案1】:

    您的解决方案适用于:

    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))
    

    无论如何,你需要记住:

    单引号或双引号变量(或替换变量字符串) 导致 %@、%K 或 $variable 在 格式化字符串,从而防止任何替换。

    Parser Basics (Predicate Programming Guide)

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

    【讨论】:

    • @OOPer,谢谢。你知道我如何在谓词中组合像 CONTAINS text0 AND CONTAINS text1 这样的语句吗?
    • @spin_eight, NSPredicate(format: "entityProperty CONTAINS %@ AND entityProperty CONTAINS %@", text0, text1) 可以。如果我可能遗漏了什么,请给我更多的背景信息。
    • @OOPer 我的错误,向我道歉,我已阅读此answer 并了解更多信息。
    • @NDoc,我知道我可能会出错,所以我应该欢迎各种 cmets。请不要犹豫,在未来指出我的错误。我向您推荐的一件事是您最好尊重其他来源而不是 SO。祝您和您的应用好运。
    【解决方案2】:
    request.predicate = Predicate(format: "entityProperty MATCHES [c] '[^0123]\(myValue)'")
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-05
      • 1970-01-01
      • 1970-01-01
      • 2014-08-01
      • 2011-06-15
      • 1970-01-01
      • 2012-02-24
      相关资源
      最近更新 更多