> Java > Java베이스 > 본문

Java는 정규식을 사용하여 특정 규칙을 포함하지 않는 문자열을 일치시킵니다.

王林
풀어 주다: 2019-11-19 16:16:56
원래의
7905명이 탐색했습니다.

Java는 정규식을 사용하여 특정 규칙을 포함하지 않는 문자열을 일치시킵니다.

테스트 데이터:

Java는 정규식을 사용하여 특정 규칙을 포함하지 않는 문자열을 일치시킵니다.

예를 들어, 위의 간단한 로그 항목의 경우 두 가지 목표를 달성하려고 합니다.

1. 8번 항목을 필터링합니다. robots.txt를 포함하지 않는 문자열 항목이 발견되었습니다(URL에 robots.txt가 포함되어 있으면 필터링됩니다).

lookahead의 구문은 다음과 같습니다.

(?!匹配模式)
로그인 후 복사

먼저 첫 번째 목표, 즉 특정 문자열로 시작하지 않는 항목을 일치시키는 것을 달성해 보겠습니다.

여기에서는 연속된 문자열을 제외하려고 하므로 일치 패턴은 매우 간단하며 2009-07-08입니다. 구현은 다음과 같습니다.

^(?!2009-07-08).*?$
로그인 후 복사

Expresso를 사용하면 결과가 실제로 8번의 데이터를 필터링하는 것을 확인할 수 있습니다.

다음으로 두 번째 목표인 특정 문자열이 포함된 항목을 제외해 보겠습니다.

위에서 작성한 방식에 따라 살펴보았습니다.

^.*?(?!robots\.txt).*?$
로그인 후 복사

이 정규 규칙을 현지어로 설명하면 다음과 같습니다. 임의의 문자로 시작하고 robots.txt의 연속된 문자열을 따르지 말고 그런 다음 임의 개수의 문자 뒤에 문자가 옵니다. 문자열의 끝입니다.

테스트를 실행한 결과:

Java는 정규식을 사용하여 특정 규칙을 포함하지 않는 문자열을 일치시킵니다.원하는 효과를 얻지 못했습니다. 왜 이런가요? 디버깅을 위해 위 정규식에 두 개의 캡처 그룹을 추가해 보겠습니다.

^(.*?)(?!robots\.txt)(.*?)$
로그인 후 복사

테스트 결과:


Java는 정규식을 사용하여 특정 규칙을 포함하지 않는 문자열을 일치시킵니다.첫 번째 그룹은 아무것도 일치하지 않지만 두 번째 그룹은 전체 문자열과 일치합니다. 이제 다시 돌아가서 정규 표현식을 분석해 보겠습니다.

실제로 일반 엔진이 A 영역을 구문 분석할 때 이미 B 영역에 대한 예측 작업을 수행하기 시작했습니다. 이때 A 영역이 Null - .* 이면 원래 Null 문자 일치가 허용되고, A 영역 바로 다음에 로봇이 아닌 문자열 "2009"가 만족되었을 때 일치가 성공한 것으로 확인되었습니다. 따라서 전체 일치 프로세스는 모든 항목을 성공적으로 일치시킵니다.

Java는 정규식을 사용하여 특정 규칙을 포함하지 않는 문자열을 일치시킵니다.이유를 분석한 후 다음과 같이 위의 정규 표현식을 수정하고 .*?를 예측 표현식으로 이동했습니다.

^(?!.*?robots).*$
로그인 후 복사

테스트 결과:


Java는 정규식을 사용하여 특정 규칙을 포함하지 않는 문자열을 일치시킵니다.추천 튜토리얼:

Java 소개 개발

위 내용은 Java는 정규식을 사용하여 특정 규칙을 포함하지 않는 문자열을 일치시킵니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿