다음 정규 표현식이 있습니다:
으아악
다음 단어와 일치합니다:
으아악
하지만 다음 단어는 아닙니다:
으아악
이 정규식은 순서에 상관없이 3단어(WORD1
、WORD2
、WORD3
)가 포함된 문자열을 찾을 때 일치합니다.
더 많은 단어로 동일한 작업을 수행하고 싶지만 문제는 단어 수에 따라 정규식의 크기가 기하급수적으로 증가한다는 것입니다.
이 문제를 해결하기 위해(크기가 기하급수적으로 증가하지 않고) 이 정규식을 구성하는 방식을 단순화할 수 있습니까?
모든 문자열을 반복하고 모든 키워드를 포함하지 않는 모든 문자열을 필터링하면 됩니다.
(더 간결한 버전은 아래 코드 조각에서 찾을 수 있습니다)
으아악해 보세요:
각 단어에 대해 긍정적인 예측을 사용할 수 있습니다.
으아악아래의 보다 성능이 뛰어난 버전은 시작 앵커를 지정하고 미리보기를 확인한 후 단일 문자만 일치시킵니다. OP의 요청에 따라 이 기술은
으아악matching
,而不适用于extraction
에서만 작동합니다.정방향 예측은 게이트와 같습니다. 괄호 안에 지정된 일치 항목이 존재하는 경우에만 계속되지만 일치하는 항목을 소비하거나 캡처하지 않습니다. 길이는 항상 0입니다. 각 단어 앞에
.*
가 있는지 확인하기 위해 "미리 살펴보는" 경우 단어의 순서는 중요하지 않습니다. 각 단어가 참이면 매칭을 위해 아무 것도 사용하지 않고 진행합니다. p>내용이 일치하는지에만 관심이 있다면 두 표현의 유일한 실질적인 차이점은 걸리는 시간입니다. 콘텐츠에 필수 단어 3개 중 2개만 있다고 가정해 보겠습니다. 표현을 해석하는 소프트웨어가 시도가 쓸모없다는 것을 인식하지 못하는 한, 첫 번째 위치에서 "실패" 세 단어를 찾은 다음 두 번째 위치에서 "실패"를 시도하는 방식으로 마지막 위치에 도달할 때까지 계속됩니다. 위로.
^
,只会在第一个位置进行检查,节省了其他不必要检查的时间。当您只是寻找内容中是否存在所有单词的真/假答案时,从末尾删除*
를 지정하면 일부 불필요한 캡처를 방지할 수 있습니다.