Exim 필터링에서 정규식 사용

Exim 필터링에서 정규식 사용

다음이 포함된 스팸을 차단하기 위해 exim 필터를 만들려고 합니다.

“85% 할인”

제목 줄에. 공백, 두 자리 숫자, 퍼센트 기호, 공백 및 모두 대문자로 된 "OFF"라는 단어입니다. 이것이 내가 쓴 것입니다:

# Exim filter
if
  $header_subject: contains " \\d{2}% OFF"
then
   fail text "no spam please"
   seen finish
endif

그런데 이게 안되는 것 같고, 매칭된 메시지가 전달되더라도 통과가 허용되는 것 같습니다.정규 표현식 101시험. 내가 무엇을 놓치고 있나요? 올바른 구문은 무엇입니까?

답변1

일시적 .forward으로 내 것을 귀하의 것으로 교체했는데 작동하지 않는 것을 확인했습니다.

두 가지 질문이 있습니다.

  1. contains하위 문자열 일치를 수행하지만 정규식을 이해하지 못합니다. matches대신 원하는 정규 표현식을 사용하세요 contains.

  2. PCRE 스타일 문자 클래스는 구문과 마찬가지로 \d손상된 것처럼 보입니다 ! {N}다양한 조합을 시도해 봤습니다. 유일한 유효한 구문은 작동하지 않더라도 작동 [0-9][0-9]하지 않습니다 . (저는 버전 4.72를 실행하고 있습니다.)[0-9]{2}[0-9]\\{2\\}\\d\\d편집: 이유는 다음과 같습니다. 정규식에 공백이 포함되어 있지 않으면 Exim 필터 파일의 정규식을 따옴표로 묶을 필요가 없습니다. 그러나 따옴표가 없는 정규식에서도 백슬래시는 두 배가 되어야 합니다. 인용된 정규식에서는 다시 두 배로 늘려야 합니다. $header_subject: matches "\\\\d{2}% OFF".count `em: 백슬래시 4개.

스크립트 테스트를 사용하십시오 /usr/sbin/exim -bF <scriptfile> -f <sender>. 테스트 메시지는 표준 입력(예: 파일에서 리디렉션)으로 제공되어야 합니다.

테스트 Subject:처리의 경우 해당 헤더 행만 포함하고 다른 것은 포함할 수 없습니다. F의 대문자는 명령 처리를 -bF활성화하는 데 사용되며 를 사용하면 비활성화됩니다 .fail-bf

관련 정보