>  기사  >  백엔드 개발  >  php - PCRE 정규식 내부 옵션 설정

php - PCRE 정규식 내부 옵션 설정

伊谢尔伦
伊谢尔伦원래의
2016-11-21 17:21:241303검색

PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, PCRE_UNGREEDY, PCRE_EXTRA, PCRE_EXTENDED 및 PCRE_DUPNAMES와 같은 패턴 수정자 설정은 Perl 옵션 문자 시퀀스를 통해 패턴 내에 설정할 수 있습니다. 사용 가능한 수정자는 다음과 같습니다.

내부 옵션 문자

i는 PCRE_MULTILINE의 PCRE_CASELESS

PCRE_DOTALL의 경우

x는 PCRE_EXTENDED

U의 경우 PCRE_UNGREEDY

X는 PCRE_EXTRA

J는 PCRE_INFO_JCHANGED

예를 들어 (?im) 설정은 여러 줄의 대소문자를 구분하지 않는 일치를 나타냅니다. 이를 사용하여 이러한 설정을 취소할 수도 있습니다. 예를 들어 (?im-sx)는 PCRE_CASELESS, PCRE_MULTILINE을 설정하지만 PCRE_DOTALL 및 PCRE_EXTENDED를 동시에 취소합니다. - 앞뒤에 문자가 모두 나타나면 이 옵션이 설정되지 않은 것입니다.

옵션이 패턴의 상단에 있는 경우(즉, 하위 그룹에 속하지 않음) 변경 사항이 패턴의 나머지 부분에 영향을 미칩니다. 예를 들어 /ab(?i)c/는 "abc" 및 "abC"에만 일치합니다. 이 형식은 PCRE 4.0(PHP 4.3.3)에서 변경되었습니다. 이전 버전에서는 /ab(?i)c/가 /abc/i와 똑같이 동작했습니다.

하위 그룹에 옵션을 설정하면 영향이 달라집니다. 이는 Perl 5.005의 동작 변형입니다. 하위 그룹 내에서 옵션이 설정되어 하위 그룹의 나머지 부분만 변경되므로 (a(?i)b)c는 "abc" 및 "aBc"에만 일치합니다(PCRE_CASELESS 옵션이 사용되지 않는다고 가정). 이는 옵션이 패턴의 다른 위치에서 다른 효과를 가질 수 있음을 의미합니다. 동일한 하위 모드 내에서 한 분기에 대한 옵션 설정은 뒤따르는 나머지 분기로 전파됩니다. 예를 들어 (a(?i)b|c)는 "ab", "aB", "c" 및 "C"와 일치합니다. "C"와 일치하는 경우 옵션이 설정되기 전에 첫 번째 분기가 삭제됩니다. 이는 옵션 설정이 컴파일 타임에 결정되기 때문입니다. 그렇지 않으면 매우 이상한 동작이 발생할 수 있습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.