2016-06-02 2 views
1

로그가 많으며 모든 레코드에 URL이 있습니다. 그리고 로그를 필터링하기 위해 약 2000 개 이상의 URL 패턴이 있습니다. 일부 패턴은 캡처 할 수있는 그룹이있는 정규 패턴입니다. 나는 url과 일치하는 패턴을 얻고, 가능한 경우 캡처 된 그룹을 얻고 싶다. 거기에 자바 lib이 나를 도울 수있다. 또는 내 문제를 해결할 수있는 알고리즘. 또는 내 문제와 관련된 기타. 고마워.다중 패턴 매치 알고리즘

답변

0

Java 정규 표현식 라이브러리 (link)를 살펴보십시오.

원본 패턴을 |으로 연결하여 단일 큰 패턴을 구성 할 수 있습니다 (문자 1 자만을 사용하지 않으려면 ()을 사용하십시오).

정규식은 효율적으로 일치하는 유한 오토마타로 컴파일되어 데이터를 다룰 수 있습니다. 한 번 컴파일 한 다음 모든 레코드에 대해 다시 사용하십시오.

그룹을 추출하는 작업을 처리하지만 그룹을 일치시킬 수 있으므로 일반적인 방식으로 그룹을 처리해야합니다. 이름이 지정된 그룹을 사용하면 처리가 더 간단 해집니다.

+0

정확하게 일치하는 패턴이나 관련 정보를 얻고 싶습니다. 내가 자바 정규 표현식 라이브러리와 함께 이것을 지원하는 방법을 찾지 못했습니다. – icn19

+0

명명 된 그룹을 사용하거나 패턴에 생성 된 이름 (예 : 'pattern_0', 'pattern_1'...)을 지정하십시오. '(? X)'와 같이 정의하여 X를 이름'name'과 일치시킵니다. 그런 다음 결과를 다시 얻으면'Mathcher.group ("name")'이됩니다. 할당 한 이름을 반복하여 모두 요청해야합니다. 함수와 일치하지 않는 그룹의 경우 해시 검색을 수행하고 null을 반환합니다 (빠름). 이것은 입력 문자열을 다시 트래버스 할 필요가 없으므로 각 패턴에 대해 별도의 정규식을 갖는 것보다 훨씬 빠릅니다. – Sorin