가능한 여러 문자열 집합에서 하나의 값에 대해서만 정규식 일치하지만 해당 집합의 여러 문자열은 일치하지 않습니다.

호의

w, x, y 또는 z의 인스턴스 만 포함하고 w, x, y 및 z의 조합이 아닌 문자열과 일치하는 정규식을 원합니다 . "w ... w"는 허용되지만 "w ... x"또는 "y ... y ... w"는 허용되지 않습니다.

몇 가지 정규식 테스트 사이트에서 다음을 테스트했지만 표현식의 길이를 줄이려고합니다. 누구든지 이것을 더 간결하게 표현하는 방법을 알고 있습니까?

(^(?!.*(x|y|z)).*(w))|(^(?!.*(w|y|z)).*(x))|(^(?!.*(w|x|z)).*(y))|(^(?!.*(w|y|x)).*(z))
Wiktor Stribiżew

네거티브 룩어 헤드에서 대체 캡처 링 그룹을 정의한 다음 첫 번째 캡처 그룹 값에 대한 역 참조를 포함하는 네거티브 룩어 헤드와 이전에 일치 한 것을 제외하고 대안 중 하나가 있는지 확인할 수 있습니다. PCRE 정규식에서 나중에 (?n)구문을 사용하여 그룹 1 하위 패턴을 다시 사용할 수 있습니다 .

(?i)^(?!.*(w|x|y|z).*(?!\1)(?1)).*(?1)

regex 데모를 참조하십시오 .

(?i)그 사례를 구분하게됩니다.

세부:

  • (?i) -대소 문자를 구분하지 않는 수정 자
  • ^-문자열의 시작 ( /m수정자가 사용되는 경우 줄 )
  • (?!.*(w|x|y|z).*(?!\1)(?1))-이 경우 경기를 실패 부정적인를 내다 w, x, y또는 z다음 값 중 하나를 준수 문자열의 어딘가에 있지만 그룹 1에 포착 즉 동일하지 않습니다
  • .*-개행 문자가 아닌 0 개 이상의 문자를 일치시키고 사용합니다 (또는 /s개행 문자를 포함하여 수정자가 사용되는 경우 ).
  • (?1)-그룹 1에서 사용 된 서브 패턴을 반복합니다 (따라서 쓰기와 동일합니다 (w|x|y|z)).

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관