ObjecTips

Swift & Objective-C で iOS とか macOS とか

NSPredicate でワイルドカード

predicateWithFormat:ワイルドカードを使う事ができる。

1つ目はの a*e は先頭の文字が a で間に何文字か挟んで(0文字でもOK)末尾の文字が e の文字列が条件に合致する。
2つ目の a??le は先頭の文字が a で間に2文字挟んで末尾の文字が le の文字列が条件に合致する。

ちなみに、1つ目の predicate は

[NSPredicate predicateWithFormat:@"SELF BEGINSWITH[c] 'a' AND SELF ENDSWITH[c] 'e'"];

で書いた方が処理は早いので、横着せずに BEGINSWITHENDSWITH を用いた方がベター。
begin with と end with じゃなくて、begins with と ends with なので注意。


念のため
a*e は先頭の文字が a で間に何文字か挟んで(0文字でもOK)末尾の文字が e という条件で、 SELF BEGINSWITH[c] 'a' AND SELF ENDSWITH[c] 'e'a で始まり e で終わるという条件なので、文字列が1文字である事も有り得る場合この2つの処理の結果は変わってくる。

今回 BEGINSWITH ENDSWITH との比較をしたけど、ワイルドカード*xx* とか *x*x とか x*x??x とか何でも組み合わせてできちゃうので前提としては BEGINSWITH ENDSWITH とはまったくの別物。