Predicate Format String Syntax

OSXDEV

Jump to: navigation, 찾기

Predicates Programming Guide로 이동


이 문서는 프리디케이트 스트링의 문법과 프리디케이트 파서에 대한 몇가지 사항을 설명한다.

목차

[편집] Parser Basics

프리디케이트 스트링 파서는 공백을 인식하지 않고, 키워드를 구분할 때 대소문자에 무심하고, 내부 괄호nested parenthetical 표현을 지원한다. 파서 스트링은 regex엔진으로 넘어오는 표현과는 다르다는 것을 명심하라. 이 섹션은 regex엔진의 문법이 아닌, 파서 텍스트를 기술한다.


변수들은 $로 기술된다(예를 들면 $VARIABLE_NAME).파서는 의미적으로 타입 체크를 수행하지 않는다. ?는 적당한 파서 토큰이 아니다.


포맷스트링은 %x같은 printf스타일의 포맷 매개변수를 지원한다. 두개의 중요한 매개변수는 %@와 %K이다.

  • %@는 대체변수이다 - 주로 스트링, 숫자, 날짜 값
  • %K는 키 패스에 대한 대채변수이다.

스트링 변수가 %@를 이용해 포맷 스트링으로 대체될 때, 따옴표로 둘러싸인다. 포맷 스트링에서 동적인 프라퍼티 이름을 지정하기 원한다면, 다음 예제처럼 %K를 사용하라.

NSString *attributeName = @"firstName";
NSString *attributeValue = @"Adam";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K like %@", attributeName, attributeValue];

이 경우 포맷 스트링은 firstName like "Adam"과 같다.

단일 혹은 복수 따옴 변수들(또는 대체 변수 스트링)은 %@, %K또는 $variable 가 포맷 스트링에서 문자그대로 번역되어 대체되지 않는다. 다음의 예제에서, 프리디케이트 포맷 스트링은 firstName like "%@"(%@주위로 외 따옴표가 있는것에 주의)

NSString *attributeName = @"firstName";
NSString *attributeValue = @"Adam";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K like '%@'", attributeName, attributeValue];

[편집] Basic Comparisons

=, ==

왼쪽편 공식이 오른쪽편 공식과 동일하다.


>=, =>

왼쪽편 공식이 오른쪽편 공식과 동일하거나 보다 크다.


<=, =<

왼쪽편 공식이 오른쪽편 공식과 동일하거나 보다 작다.


>

왼쪽편 공식이 오른쪽편 공식 보다 크다.


<

왼쪽편 공식이 오른쪽편 공식 보다 작다.


!=, <>

왼쪽편 공식이 오른쪽편 공식과 다르다.


BETWEEN

왼쪽편 공식이 오른쪽편에 지정한 값들 사이에 있다. 오른쪽 값은 상한과 하한. 두개 값의 어레이이다(정렬을 위해 하나의 어레이가 필요). 예를 들어, 1 BETWEEN { 0, 33} 혹은 $INPUT BETWEEN {$LOWER, $UPPER }.

Objective-C에서, BETWEEN 프리디케이트를 다음과 같이 만들 구 있다.

NSNumber *one = [NSNumber numberWithInt:1];
NSNumber *ten = [NSNumber numberWithInt:10];
NSPredicate *betweenPredicate = [NSPredicate predicateWithFormat: @"attribute BETWEEN %@",  [NSArray arrayWithObjects: one, ten, nil]];

이것은 ( ( 1 < attributeValue ) && ( attrbuteValue < 10 ) )에 일치하는 프리디케이트를 만든다.

[편집] Boolean Value Predicates

TRUEPREDICATE

항상 TRUE로 평가하는 프리디케이트.


FALSEPREDICATE

항상 FALSE로 평가하는 프리디케이트.

[편집] Basic Compound Predicates

AND, &&

논리적 AND.


OR, ||

논리적 OR.


NOT, !

논리적 NOT.


[편집] String Comparisons

기본적으로 대소문자와 diacritic 구분을 한다. c와 d를 대괄호 안에 넣어서 각각 대소문자와 diacritic을 구분하지 않도록 수정할 수 있다. 예를들어, firstName BEGINSWITH[cd] $FIRST__NAME.


BEGINSWITH

왼쪽 표현이 오른쪽 표현으로 시작한다.


CONTAINS

왼쪽 표현이 오른쪽 표현을 포함한다.


ENDSWITH

왼쪽 표현이 오른쪽 표현으로 끝난다.


LIKE

왼쪽 표현이 오른쪽 표현과 같다: ?와 * 는 와일드 카드 문자로 사용가능하며, ?는 하나의 문자를 나타내며 *은 0또는 그 이상의 문자열에 해당한다. Mac OS X v10.4에서, 와일드카드 문자는 newline 문자와 일치하지 않는다.


MATCHES

왼쪽 표현이 ICU v3에 따른 regex스타일의 비교를 했을 때 오른쪽 표현과 동일하다(보다 자세한 정보는 ICU User Guide for Regular Expressions를 보라).


[편집] Aggregate Operations

ANY, SOME

이어지는 표현에서 어느 하나의 요소라도 예) ANY children.age < 18


ALL

이어지는 표현에서 모든 요소가 예) ALL children.age < 18


NONE

이어지는 표현에서 어떤 것도 아닌. 예) NONE children.age < 18. 이것은 논리적으로 NOT(ANY...)와 동일.


IN

SQL의 IN오퍼레이션과 동일. 왼쪽편은 오른쪽 편에서 지정하는 컬렉션 중에 있어야 한다. 예) name IN { 'Ben', "Melissa', 'Matthew' }. 컬렉션은 어레이나, 세트 또는 딕셔너리일 수 있으며 딕셔너리의 경우, 값들이 사용된다. Objective-C에서, IN 프리디케이트를 다음과 같이 만들 수 있다.

NSPredicate *inPredicate = [NSPredicate predicateWithFormat: @"attribute IN %@", aCollection];

aCollection은 NSArray, NSSet, NSDictionary 또는 각각의 뮤터블 클래스의 인스턴스이다.


array[index]

지정된 어레이 array의 인덱스에 있는 요소를 지정.


array[FIRST]

어레이 array의 첫번재 요소를 지정.


array[LAST]

어레이 array의 마지막 요소를 지정.


array[SIZE]

어레이 array의 크기를 지정.


[편집] Identifiers

C style identifier

모든 C 스타일의 아이텐티파이어는 예약어가 아니다.


#Symbol

예약어를 사용자 identifier로 빼낸다


[\]{octaldigit}{3}

octal넘버를 빼내기 위해 (\는 3 octal digits 뒤에)


[\][xX]{hexdigit}{2}

hex 넘버를 빼내기 위해 (\x혹은 \X는 2 hex digits 뒤에)


[\][uU]{hexdigit}{4}

unicode넘버를 빼내기 위해 (\u 혹은 \U는 4 hex digits 뒤에)


[편집] Literals

쌍따옴표와 외따옴표는 같은 결과를 만든다. 하지만 서로를 마무리하지는 못한다. "abc"와 'abc'는 같지만 "a 'b' c"는 공백으로 분리된 a, 'b', c와 같다.


FALSE, NO

로지컬 거짓


TRUE, YES

로지컬 참


NULL, NIL

널 값


SELF

평가되는 오브젝트 그 자체.


"text"

문자 스트링


'text'

문자 스트링


Comma-separated literal array

예를들면 { 'comma', 'separated', 'literal', 'array' }


Standard interger and fixed point notations

예를 들면 1, 27, 2.71828, 19.75


Floating point notation with exponentiation

예를 들면 9.2e-5


0x

hexadecimal디짓 시퀀스를 표기하기 위한 프리픽스


0o

octal 디짓 시퀀스를 표기하기 위한 프리픽스


0b

binary 디짓 시퀀스를 표기하기 위한 프리픽스

[편집] Reserved Words

다음 단어들은 예약어이다.

AND, OR, IN, NOT, ALL, ANY, SOME, NONE, LIKE, CASEINSENSITIVE, CI, MATCHES, CONTAINS, BEGINSWITH, ENDSWITH, BETWEEN, NULL, NIL, SELF, TRUE, YES, FALSE, NO, FIRST, LAST, SIZE, ANYKEY, SUBQUERY, CAST, TRUEPREDICATE, FALSEPREDICATE