2016-08-27 6 views
0

正規表現で自分の値を指定したいのですが、どうすればいいですか?Predicateの正規表現でのプレースホルダ使用の構文は何ですか?

私は何をやっている:代わりの

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

を、結果を見ると、私は、%@を正規表現文字列の文字として解析され、値が配置されていないと言うことができ

ここではいくつかあります述語で正規表現の使用方法のexplanationが、値

答えて

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または$変数をリテラルとして解釈し、置換を防止します。

Parser Basics (Predicate Programming Guide)

(私はPredicateとしてNSPredicateを使用Xcodeの8ベータ版6では使用できません)

+0

@OOPer、ありがとうございました。 CONTAINS text0とCONTAINS text1のようなステートメントを述語でどのように組み合わせることができるか知っていますか? –

+0

@spin_eight、 'NSPredicate(形式:" entityProperty CONTAINS%@とentityProperty CONTAINS%@ "、text0、text1)'が動作します。私が何かを見逃しているかもしれないなら、もう少し文脈を与えてください。 – OOPer

+0

@OOPer私の間違いは、私に謝って、私はこれを読んだ[回答](http://stackoverflow.com/a/38723245/6433023)とそれについてのより多くのアイデアを得る。 –

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

ソリューションのためのプレースホルダに関する情報:
代わり%@プレースホルダを使用する文字列置換の: "prefixSomeText \(myValue)suffixSomeText"