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"
您的解决方案适用于:
myValue
表示有效的正则表达式模式。
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 中不可用。)
我想在正则表达式中指定我的值,我该怎么做?
我在做什么:
request.predicate = Predicate(format: "entityProperty MATCHES [c] '[^0123]%@'", myValue)
观察结果,我可以说 %@ 被解析为正则表达式字符串中的一个字符,没有值代替它
这里有一些explanation关于正则表达式与谓词的用法,但没有关于值占位符的信息
request.predicate = Predicate(format: "entityProperty MATCHES [c] '[^0123]\(myValue)'")
解法:
而不是 %@
占位符使用字符串替换:
"prefixSomeText\(myValue)suffixSomeText"
您的解决方案适用于:
myValue
表示有效的正则表达式模式。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 中不可用。)