>  기사  >  백엔드 개발  >  php - PCRE 정규식 조건부 하위 그룹

php - PCRE 정규식 조건부 하위 그룹

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

매처가 조건부로 하위 그룹과 일치하도록 하거나 어설션 결과 또는 이전 캡처 하위 그룹이 일치하는지 여부에 따라 두 개의 선택적 하위 그룹 중에서 선택할 수 있습니다. 조건부 하위 그룹의 두 가지 구문은 다음과 같습니다.

(?(condition)yes-pattern)
(?(condition)yes-pattern|no-pattern)

조건이 충족되면 yes 패턴이 사용되고, 그렇지 않으면 no 패턴이 사용됩니다(지정된 경우). 선택적 하위 그룹이 2개 이상 있으면 컴파일 시간 오류가 생성됩니다.

두 가지 조건이 있습니다. (조건)의 괄호가 숫자로 구성된 텍스트인 경우, 숫자가 나타내는 (이전) 하위 그룹이 일치하면(즉, yes 패턴을 사용하여) 조건이 만족됩니다. 더 쉽게 읽을 수 있도록 공백이 추가되고(PCRE_EXTENDED 옵션 참조) 세 부분으로 나누어진 다음 패턴을 고려하세요. ( ( )? [^()]+ (?(1) ) )

첫 번째 부분

패턴의 선택 사항인 왼쪽 괄호와 일치하며, 해당 문자가 나타나면 캡처된 하위 문자열의 첫 번째 하위 그룹으로 설정합니다. 두 번째 부분은 대괄호가 아닌 문자 중 하나 이상과 일치합니다. 세 번째 부분은 첫 번째 하위 그룹이 일치하는지 여부를 테스트하는 조건부 하위 그룹입니다. 즉, 대상 문자열이 왼쪽 대괄호로 시작하고 조건이 TRUE인 경우 yes 패턴을 사용합니다. 여기에는 오른쪽 대괄호가 필요합니다. 그렇지 않으면 패턴이 없으므로 하위 그룹은 어떤 것과도 일치하지 않습니다. 즉, 이 패턴은 괄호가 없거나 닫는 괄호로 묶인 일련의 문자와 일치합니다.

조건 문자열(R)인 경우 패턴이나 하위 패턴에 대한 재귀 호출을 받을 때 만족됩니다. "최상위 수준"에서는 조건이 항상 false입니다.

조건이 일련의 숫자나 (R)이 아닌 경우 어설션이어야 합니다. 여기서의 주장은 임의적, 긍정적, 부정적, 전진 또는 후진일 수 있습니다. 가독성을 위해 약간의 공백이 추가되고 두 ​​번째 줄에 두 개의 대체 경로가 있는 이 패턴을 다시 고려해보세요.

(?(?=[^a-z]*[a-z])
\d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} )

조건부 소문자 이외의 알파벳 문자와 그 뒤에 소문자의 선택적 시퀀스를 일치시키는 긍정적 어설션입니다. 즉, 대상에 소문자가 하나 이상 있는지 테스트하고, 소문자가 발견되면 대상은 첫 번째 선택적 분기와 일치하고, 그렇지 않으면 두 번째 분기와 일치합니다. 이 패턴은 dd-aaa-dd 또는 dd-dd-dd라는 두 가지 형식의 문자열과 일치합니다. aaa는 소문자를 나타내고 dd는 숫자를 나타냅니다.


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