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))
네거티브 룩어 헤드에서 대체 캡처 링 그룹을 정의한 다음 첫 번째 캡처 그룹 값에 대한 역 참조를 포함하는 네거티브 룩어 헤드와 이전에 일치 한 것을 제외하고 대안 중 하나가 있는지 확인할 수 있습니다. 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] 삭제
몇 마디 만하겠습니다