2013-03-19 3 views
0

문자열 목록 중 하나와 일치해야하며 별도의 작업을 수행하는 대신 "item1|item2|item3|..."과 같은 정규 표현식을 사용할 수 있는지 궁금합니다. 각 문자열에 대해 strstr(). 그러나 목록은 매우 클 수 있습니다 - 최대 10000 개 항목. 정규식이 잘 작동할까요? 별도로 각 문자열을 검색하는 것보다 빠르지 않습니까?tr1 :: regex_search를 사용하여 문자열의 큰 목록을 찾습니다.

+0

모든 컴파일러가 ''의 작동 구현을 갖고있는 것은 아니므로주의하십시오. AFAIK, [GCC는 부분적인 지원 만 있습니다] (http://stackoverflow.com/a/15059522/1174378). –

+0

나는 그것에 대해 몰랐다. 내가 boost :: regex GCC에 사용할 수 있다고 가정? – sashoalm

+0

예, 불행히도 플러그 앤 플레이 대체품이 아닙니다. –

답변

1

정규식이 작동하고 각 문자열을 검색하는 것보다 빠를 것입니다. 비록 내가 얼마나 많은 메모리 풋 프린트 나 시간이 초기 설정에 10000 입력 패턴이 주어 졌는지 확신 할 수는 없지만.

그러나,이 공지의 문제는 특정의 알고리즘은 많은 예있다 :

및 기타 여러 가지. 그들은 모두 서로 다른 장단점이 있으므로 독약을 선택하십시오.

우리 프로젝트에서는 다중 교체 솔루션이 필요했기 때문에 Aho-Corasick 알고리즘을 선택했으며 교체 알고리즘을 구현했습니다.

관련 문제