연속 문자열 이 포함 되 지 않 은 줄 에 0 폭 단언 을 사용 합 니 다.
4444 단어 문자열
최근 작업 중 문제 가 발생 했 습 니 다. N 개의 문자열 이 있 습 니 다. 특정한 연속 문자열 (예 를 들 어 abc) 이 포함 되 지 않 은 문자열 을 정규 표현 식 으로 걸 러 내야 합 니 다.
인터넷 에서 한 줌 을 찾 아 보 았 는데 Perl 5 의 정규 표현 식 에서 0 폭 의 단언 이 있 는 것 을 찾 았 습 니 다. 매우 강력 합 니 다. 먼저 0 폭 의 단언 이 무엇 인지 알 아 보 겠 습 니 다.
쉽게 말 하면 제로 폭 의 단언 은 어떤 내용 이 있 기 전이 나 그 후의 것 을 찾 는 것 이다. 이렇게 해석 하면 추상 적일 수 있다. 우 리 는 몇 가지 제로 폭 의 단언 을 구체 적 으로 살 펴 보 자.
0 폭 의 단언 을 이해 할 때 주의해 야 할 것 은 그것 이 일종 의 단언 이라는 것 이다. 즉, 0 폭 의 단언 은 일치 하지 않 는 것 만 알려 줄 뿐 문자열 안의 내용 을 '소비' 하지 않 는 다 는 것 이다. 나 는 아래 의 이 예 로 이 상황 을 설명 한다.
우 리 는 정규 표현 식 이 있다.
k(?=h)otyn
khotyn 과 일치 합 니 다. 언뜻 보기 에는 이 일치 가 성공 할 것 입 니 다. 그러나 0 폭 의 단언 은 단언 만 하고 '일치 하 는 문자열 을 소비 하지 않 기 때문에 사실상 이 정규 표현 식 은 뒤에 h 의 k 이 고 이 k 의 뒤 에는 otyn 입 니 다. 그러면 이 정규 표현 식 은 어떤 문자열 이 든 일치 하지 않 습 니 다. 실패 합 니 다.(옳 은 것 은 k(?=h)hotyn
그러나 이렇게 0 폭 의 단언 을 덧 붙 이 는 것 은 의미 가 없다.0 폭 의 단언 을 이해 한 후에 "abc" 가 포함 되 지 않 은 문자열 과 일치 하 는 방법 을 살 펴 보 겠 습 니 다. 다음은 제 가 쓴 결과 입 니 다.
1
((?!abc).)+
우선 이 정규 표현 식 에 있 는
(?!abc).
부분, 이 부분 은 빈 문자 뒤에 문자열 abc 와 일치 하지 않 으 며, 이 빈 문자열 뒤에 임의의 문자 가 있다 고 단언 합 니 다.다음 코드 를 살 펴 보 겠 습 니 다.
1
2
3
4
Pattern pattern = new Perl5Compiler().compile("((?!abc).)+"); Perl5Matcher matcher = new Perl5Matcher(); System.out.println(matcher.matches("abc", pattern)); System.out.println(matcher.matches("abdas dfas", pattern));
이 코드 의 실행 결 과 는:
1
2
false true
첫 번 째 일치 실 패 는 문자 'a' 앞의 빈 문자 뒤에 문자열 'abc' 가 일치 하기 때문에 단언 이 실 패 했 고 일치 에 실 패 했 습 니 다.
두 번 째 일치 가 성공 한 것 은 빈 문자 뒤에 'abc' 가 나타 나 지 않 았 기 때 문 입 니 다. 일치 가 성공 하기 때 문 입 니 다.
마지막 으로 + 번 호 를 더 한 이 유 는 완전히 일치 할 수 있 기 때 문 입 니 다. 그 어떠한 문자 도 그 자체 가 'a' 가 아니 고 그 뒤에 'bc' 가 아니라면 '(?! abc)' 와 일치 할 수 있 기 때 문 입 니 다. 따라서 하나의 문자열 에 abc 가 포함 되 어 있 지 않 으 면 완전히 일치 할 수 있 습 니 다 (? abc).) +
PS: 이 글 은 사실 몇 년 전에 쓴 것 입 니 다. 예전 에 블 로그 가 닫 혔 고 데이터 가 없어 졌 습 니 다. 다행히 Ieye 에 한 부 더 있어 서 이 사 했 습 니 다. 요 몇 년 동안 저 는 이 방식 으로 온라인 서버 의 로 그 를 분 석 했 습 니 다. 제로 폭 의 단언 이 있어 서 많은 번 거 로 움 을 줄 였 습 니 다. 포 지 셔 닝 문제 의 속도 도 많이 빨 라 졌 습 니 다. 제로 폭 의 단언 은 확실히 하나 입 니 다.아주 날 카 로 운 물건 이 야.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
비슷한 이름의 Attribute를 많이 만들어 삭제하는 Houdini사용 소프트웨어는 Houdini16.5입니다 배열에서는 애트리뷰트의 보간이 잘 동작하지 않는 것과 AttributeCreateSOP 노드에서 Size가 4를 넘는 애트리뷰트를 작성해도 값이 조작할 수 없어 의미가 없...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.